- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
之前在学校的时候,只知道session与cookie的区别在于:session是保存在服务器端,cookie保存在客户端。session怎么样保存的?以文件的形式保存。自己去测试过。有的忘记了。对应session的id号模糊不清。在开发中,非常有必要弄明白具体细节。不能停留在使用session_start()函数了,然后获取session值。不知道里面的机制,在开发中遇到了新的问题,解决起来比较费心。一、session是怎么保存的?怎么去查看其内容?session是以文件的形式保存的。php.ini中有个配置项--session.save_path= ;这个里面填写的路径,将会使session文件保存在该路径下。session文件的命名格式是:sess_[PHPSESSID的值]。每一个文件,里面保存了一个会话的数据。其实只要使用代码$_SESSION[user_id] = $value;就会促发php的session机制,结果往对应的session文件中写入一个值。二、session.save_path路径下这么多的session文件,php是如何确定要调用哪个session文件的?php是依据,一个名为PHPSESSID的cookie,根据它的值,确定要调用哪个session文件的。去浏览器中,可以看到一个cookie名为PHPSESSID,假如它的值为sess_adbjsf2q1ass26oootd163sf84,那么,当访问服务器的时候,就会调用session目录下名为sess_sess_adbjsf2q1ass26oootd163sf84的文件。其实,PHPSESSID就是一个会话id,以此来确定,哪个是你的会话数据。cookie的名字PHPSESSID是可以改的,在php.ini中 = PHPSESSID就是设置该cookie的名字。结合自己实际开发中遇到的问题,总结一下:要说session跟cookie有关联的地方,就是跟PHPSESSID这个cookie有绑定关系。其他,不管你设置什么cookie,使用session的时候是不会用到这些值的。也无法获取到。比如同步登陆,设置即使设置了cookie,而你的应用是依据session判断是否为登陆状态的(事实上也必须如此,因为session保存在服务器端,安全性更高,哪个依据cookie认为你已经登陆,那么很惨)。所以,这样的情况就会出现,即使成功设置了cookie。也还是不能同步登陆。三、经常遇到的现象:为什么删除一个session文件,之后生成一个session文件,新的文件名字还是与原来一样?理解到session文件的命名规则是:“sess_PHPSESSID值“。那么,就很容易明白了。因为,客户端存在cookie:PHPSESSID。客户端发送请求后,会将该cookie发送给服务器(php可以使用$_COOKIE[PHPSESSID]看到其内容),这样的话,还是会根据PHPSESSID生成一个session文件的。四、如何查看session文件中的session值?我在开发中发现,如果仅仅依靠session_start()和$_SESSION[user_id]这样的代码,去调试,还不够全面的了解问题所在。比如,我想知道,session_start()到底在完成哪些操作?如果,想动态,实时知道session的值是如何被改写的,打开一个session文件,查看是很了然的。原来,里面就是保存的是一些被序列化后的值。也明白一个知识点,php圣经中讲解session的时候,提到session值做被序列化了。下面看到的session内容就是被序列化了。打开一个session文件,内容如下:cityID|i:0;cityName|s:3:all;fanwe_lang|s:5:zh-cn;fanwe_currency|a:4:{s:2:id;s:1:1;s:6:name_1;s:9:人民币;s:4:unit;s:3:¥;s:5:radio;s:6:1.0000;}_fanwe_hash__|s:32:77c18770c6cb5d89444c407aaa3e8477;总结出读取规则:1.每一个session的值是以分号;分开的。比如“cityID|i:0;cityName|s:3:all;”就是一个完整的session值结束2.里面的读取规则:符号“|”前面表示session名称。符号后面是该session的具体信息。包括:数据类型,字符长度,内容。上面第一个就相当于使用如下php代码访问:$_SESSION[cityID]后面的s表示数据类型,这里s说明是字符串类型。3表示字符长度。最后all就表示session的具体值了。就是使用代码$_S
文档评论(0)