您的位置:首页 > 其它

基于Cookie的Session和禁用Cookie的Session

2015-07-23 11:13 344 查看

Session简介

session的作用

它是一种在客户端与服务器之间保持状态的解决方案,它将会话信息(uid等)供浏览器后续请求使用,可以获取并修改变量的值。和cookie一起使用识别同一个客户。

session何时创建

客户首次访问服务器时,session被创建并分配一个唯一的session_id,并将这个session_id传入客户端cookie中,保持客户端与服务器端的session_id一致.

如何确认某一位用户?session的有效时间

当用户再次访问浏览器时,会通过cookie传递session_id,服务器端将通过这个seesion_id确认这个用户并检索出回话信息。但是session回话是临时的,当用户关闭浏览器,或者长时间内不操作,当前session就会失效,当用户再次访问浏览器时,重新分配session_id



以上是基于Cookie的Session,当Cookie被禁用,效果就完全不一样了

PHP下的Session

要想使用开启一个会话,PHP中提供一个函数session_start(),看下这个函数的解释:


[code]bool session_start ( void )


session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。

基于Cookie的session

举例:假设有两段代码page1.php和page2.php

page1.php


[code]session_start();
$_SESSION["fuck"]="fuck";


page2.php


[code]session_start();
echo $_SESSION["fuck"]."<br>";


我们先访问page1.php,然后再访问page2.php,这时候会输出fuck。为什么呢?

首先要说一点,同一个浏览器在访问同一个站点的时候使用的是相同的cookie ,当我们先访问page1.php时,生成了session_id存放在cookie中,下次我们访问page2.php时,直接将session_id传了过去,再看session_start()函数的解释,使用 cookie 提交了会话 ID, 则会重用现有会话。,即他们拥有相同的回话,所以输出fuck




禁止Cookie

我们将浏览器的cookie禁止,看看会有什么效果

1. 禁用之前,我们在page1.php中输出session_id,发现怎么刷这个session_id都不会变,这是因为我们通过cookie传送给服务器端验证后,session_id无误,因此也就不会变化

2. 禁用之后,page1.php在每次刷新后,session_id都会改变,原理很清楚了吧,Cookie被禁用了,session_id传不上去,服务器就以为你这个session_id失效了,所以每次都会重新分配一个session_id给你

3. 这时候再去访问page2.php,并不会有任何输出

禁止Cookie后如何共享session

通过url参数进行传递,直接将session_id嵌入到URL中去。在session_start()之前添加session_id($session_id),便可以实现session共享

将session信息写入到文件中

通过Memcache实现Session共享

将session存入数据库实现共享



session共享参考:

http://blog.163.com/zeng_dili/blog/static/175459672010514352830/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: