Session和cookie

来源:互联网 发布:知识产权投诉淘宝处罚 编辑:程序博客网 时间:2024/05/05 07:42

                                                                    Sessioncookie原理

 

 

一、Session原理

当我们开启session_start的时候,就会产生一个session_id,然后浏览器将这个session_id保存在cookie中,以后浏览器每次请求都会额外加上这个参数值,再服务器根据这个session_id,就能取得客户端的数据状态。 浏览器关闭后,这个cookie就清掉了,

 

如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放,此时数据还会存在,只要我们知道那个session_id,就可以继续通过请求获得此session的信息;但是这个时候后台的session还存在,但是session的保存有一个过期时间

 

二、cookie被禁了,session_id怎么传到服务器端

A.保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。

B.由于cookie可以被人为的禁止,必须有其它的机制以便在cookie被禁止时仍然能够把session id传递回服务器,经常采用的一种技术叫做URL重写,就是把session id附加在URL路径的后面附加的方式也有两种一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。

C.另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

 

三、session垃圾回收机制

Session中,由于没有一个守护进程,进行定时扫描判断session是否失效。所以session的回收机制,是通过GC来工作的。

 

session配置中,有两个参数配置:

session.gc_probability = 1;

session.gc_divisor = 100;(同样可以通过php.ini或者ini_set()函数来修改)

这两个配置告诉我们,有1%的几率会触发回收机制GC

 

GC 的工作,就是扫描所有的session信息,用当前时间减去session的最后修改时间(modifieddate),同session.gc_maxlifetime参数进行比较,如果生存时间已经超过gc_maxlifetime,就把该session删除

 

由于概率问题。所以有很大几率不会触发GC所以有的session即使过了失效时间,也会存在。如果你想要解决这个问题,第一种:你就把session.gc_probability 参数配置成100,让GC启动概率为100%,但这样性能就会出问题,第二种:通过程序代码来判断,然后进行清除

 

有时候你会发现,你的session明明没有到时间,却失效了,因为session是不分站点的,

也就是你在A站点网站的sessionB站点网站的session都会默认存储在同一个文件夹Temp下,所以当你触发GC工作的时候,他会默认把所有超过24分钟的session都清除,尽管你的A站点session可能设置了2小时,也会被清除,解决这种情况:如果要设置session时间的时长,最好把session存放路径也设置下,存储在指定的位置,这样就行了。

 

四、cookie原理(Cookie的不可跨域

http协议是一个超文本无状态协议,没有一种内建机制来维护客户端和浏览器之间的对话,所以使用会话控制来解决这一问题。Cookie就诞生了,它可以记录客户端和浏览器之间的交互过程

 

客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

 

通俗的说:比如A去超市买东西,放入A购物车内,不管逛了多久,A再买东西,应该还是放入A购物车内,而不是放入B购物车内,那我们怎么识别用户了,就可以通过cookie来判断

 

不同的浏览器采用不同的方式保存Cookie

IE浏览器会在“C:\Documents and Settings\你的用户名\Cookies”文件夹下以文本文件形式保存,一个文本文件保存一个Cookie

 

sessioncookie的区别

1cookie数据存放在客户的浏览器上,session数据放在服务器上。

2cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session

3session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20cookie

5、session理论上没有限制存储多少个!跟服务器资源有关.

6、session默认以文件形式存储在服务器的tmp临时目录下

7、所以个人建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE

 

1 0
原创粉丝点击