Session与cookie 原理及使用小结 (2)

admin 发表于 web开发  关键字:      
2


HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。

所谓的面向连接指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,一方发出请求,必须要另一方接起电话,才能两方通信。而对应的无连接就相当于留言系统。请求方只管把通信内容放在留言系统里,而另一方从留言系统里取得内容,并决定是否要应答。也就是只有当WEB服务器开启了,你才能访问到你所请求的页面。

而状态保持是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。

出于各种原因,HTTP协议本身被设计成无状态的。也就是说,当你通过浏览器访问某个网页时,HTTP协议本身不会认识你、不会知道你是否曾经来过。HTTP协议只是允许你请求服务器上的某些文件,并将其响应信息返回。无论是SERVER还是BROWSE都不会记录过去的行为。

由于HTTP协议是无状态的,所以当我们想定制一些用户个人化、个性化的东西的时候,就需要依照某种机制来让我们认出某个用户是否曾经来过,是否有记录该用户的个人化性信息。

举个很生动的例子,商店推出了会员活动。当会员消费了一定金额时可以享受更多商品打折的待遇。如果店员每个记忆力都很好,能清楚的记得哪个用户曾经来过,买过多少钱的东西,事实上这是不可能的。这就相当于HTTP协议本身的状态:无状态。

有家卖蜂蜜的连锁店叫“明园蜂业”,他们的办法是:为每个客户发一张信息卡,每次当客户在连锁店里消费了出示了信息卡时,就在信息卡上记录下这次消息的金额,当累记金额达到一定数量时,便可以有额外的礼品赠送。这就相当于客户端Cookie。每个进入网站的用户会被分发一个Cookie,可以将一些用户个人化信息记录到这个Cookie上里,下次访问网站的时候,只要根据这个Cookie取出相应的信息就行了。

当然这种方法有个缺点:不安全。客户可能自己修改了信息卡(Cookie)上的信息,那么有可能造成一些安全方面的问题了。而另一种可能更好的做法,信息卡上只有一个唯一的号码。而信息是记录在商店里的(服务器上)。每次用户来访商店时,出示该信息卡,由商店从信息卡上读出唯一的号码,并在自己的记录本上找到该号码,这样就可以把用户的信息读取出来了。而这个记录本就相当于我们的SESSION机制。而信息卡上唯一的号码就相当于存放在Cookie里的Session ID(sid)了。

当然,就像商店一样,你可以拒绝接收会员卡,那么有另外的机制,比如说你给出一个只有你自己知道的号码,每次再来的时候,把这个号码告诉商店,由商店来查出这个号码,并查到相应的信息。这就像URL重写(在URL上附上会话的sid)。

PHP举例:

Test.php如下:

Session.php如下:

test.php

当直接访问test.php页面时,输出“你好,客人”。

当先访问过http://hostname/session.php?username=testuser页面,因为在session里已经设置了$_SESSION[‘username’],所以再访问test.php页面时,会输出“您好,testuser”。

是通过什么机制将$_SESSION[‘username’]这个值送给了test.php呢?答案是通过cookie。在test.php里输出print_r($_COOKIE)便可以看到:

Array( [PHPSESSID] => o5424qimt45j18aibp12dptd10 )

PHPSESSID是一个很难被猜测到的随机字符串。也就是我们的session id了。这个session id就相当于一把钥匙,只可以开相应的一把锁。通过这个session id,可以读取服务端相应的session信息,而在这里相应的session信息里有”username”=”testuser”这个信息,所以便可以输出相应的内容了。

如果我们将Cookie禁用掉呢?再重复上面的操作时会发现,输出的永远是“你好,客人”。因为没有session id了,服务器认为每次访问都是一次新的访问。而在这种情况下,可以选择启用URL重写机制,即在php.ini里设置session.use_trans_sid = 1。

这时候,当我们访问过session.php后通过链接地址访问test.php,会发现在URL上有类似于http://hostname/session2.php?PHPSESSID=46cl3n4lmjod1o2k6pnk3i1v13这样的附加session id。这样我们就又可以输出“您好,testuser”了

本文来自:http://blog.csdn.net/Donnki/archive/2007/09/18/1789998.aspx




找不到自己想要的东西,试试搜索一下吧^_^
Loading



本文为【爱上梁坤,爱上你】版权所有,欢迎转载。本站所有文章,未经说明,均为原创文章,转载敬请保留出处非常感谢。
  本文链接:”http://www.liangkun.net/archives/97.html

如果你觉得这篇文章对你有用,而且你又有自己的网站或者博客,请不要吝啬把本站加到你的友情链接,已经加入友情链接的朋友,请在本站留言说明,我也会在我的网站加入你的友情链接。



















【相关文章推荐】

2 篇评论 关于 “Session与cookie 原理及使用小结 (2)”

发表我的评论

 疑问 冷笑 悲伤 坏蛋 感叹 微笑 脸红 大笑 吃惊 惊讶 困惑 酷 大声笑 恼火 古怪 转眼睛 给眼色 好主意 箭头 一般 哭了 绿人