一、PHP session原理
session是在服务器端保持用户会话数据的一种方法,对应的cookie是在客户端保持用户数据。HTTP协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系,那么服务器是如何记住众多用户的会话数据呢?首先要将客户端和服务器端建立一一联系,每个客户端都得有一个唯一标识,这样服务器才能识别出来。
当我们在代码中调用session_start()时,服务器端先生成一个唯一的SESSIONID和默认值为"PHPSESSID"的session name(可以通过php.ini修改session.name值指定),再在我们服务器的默认目录(可通过修改session.save_path参数改变保存session的目录)下生成一个session文件(文件名格式为sess_{SESSIONID}),同时向客户端发送HTTP头:header('Set-Cookie:session_name()=session_id(); path=/'),在客户端生成一个cookie。
SESSION文件:
cookie:
用户发送请求时,客户端将session id传递到服务器,服务器根据session id找到对应的文件,读取的时候对文件内容进行反序列化就得到session的值,保存的时候先序列化再写入。
二、使用session之前为什么必须先执行session_start()?
了解的原理之后,所谓的session其实就是客户端一个session id服务器端一个session file,新建session之前执行session_start()是告诉服务器要种一个cookie以及准备好session文件,要不然你的session内容怎么存;读取session之前执行session_start()是告诉服务器,赶紧根据session id把session文件反序列化。
只有一个session函数可以在session_start()之前执行,session_name():读取或指定session名称(比如默认的就是”PHPSESSID”),这个当然要在session_start之前执行。
三、禁用cookie时通过URL传送session ID
如果用户关闭了cookie,那么session就完全没法工作了。PHP可以在cookie被禁用时自动通过GET方式跨页传递SESSIONID,前提是设置php.ini的session.use_trans_sid为1。这时当我们在客户端禁用了cookie时使用了session,并在当前页面通过点击链接到另一页面时,PHP会自动在链接上添加SESSIONID参数,像这样:nextpage.php?SESSIONID=2bd170b3f86523f1b1b60b55ffde0f66。
四、session的同步
我们可能有很多台服务器,用户在A服务器上登录了,种下了session信息,然后访问网站的某些页面没准跳到B服务器上去了,如果这个时候B服务器上没有session信息又没有做特殊处理,可能就会出问题了。session同步有很多种,如果你是存储在memcached或者MySQL中,那就很容易了,指定到同样的位置即可,如果是文件形式的,你可以用NFS统一存储。
还有一种方式是通过加密的cookie来实现,用户在A服务器上登录成功,在用户的浏览器上种上一个加密的cookie,当用户访问B服务器时,检查有无session,如果有当然没问题,如果没有,就去检验cookie是否有效,cookie有效的话就在B服务器上重建session。这种方法其实很有用,如果网站有很多个子频道,服务器也不在一个机房,session没办法同步又想做统一登录那就太有用了。
当然还有一种方法就是在负载均衡那一层保持会话,把访问者绑定在某个服务器上,他的所有访问都在那个服务器上就不需要session同步了,这些都是运维层面的东西。
相关推荐
山石网科防火墙session机制
有关Cookie与Session机制详细说明。好东西
cookie机制和session机制的区别.很有用的资料,最适合正在研究单点登录的朋友用
cookie机制和session机制的区别.docx
本文详细介绍了在jsp中Cookie、Session机制。
一、术语session 二、HTTP协议与状态保持 三、理解cookie机制 四、理解session机制 五、理解javax.servlet.http.HttpSession 六、HttpSession常见问题 七、跨应用程序的session共享 八、总结
详细的介绍了cookie和session的区别。
重写session机制,默认session是以临时文件形式存储在服务器,将session写入数据库,建表和注释写的都很清晰,已测试
Servlet Session机制详解,如题,详细描述Session的原理,及使用方法,附部分代码
Cookie与Session机制.docCookie与Session机制.docCookie与Session机制.docCookie与Session机制.docCookie与Session机制.doc
对两者进行比较分析讲解
该资源的主要讲解了session的主要用法,工作原理,安全机制,单点登录,在大型web中的应用。主要为对session不甚了解的同志,价值含量较高,也较为实用。
非常值得一看,2者的区别和关系
session机制与cookie机制。 这个是在人家博客上摘下来的,感觉写得不错,讲得很容易理解。
用 Jsp 的 Session 机制编写的购物车程序.txt用 Jsp 的 Session 机制编写的购物车程序.txt
PHP中Session机制的研究与应用.pdf
实现session身份认证机制
全面理解session机制,对开发过程中session的使用提供知识!
8.session机制.doc 8.session机制.doc
中session怎么设置,打开 php.ini,查找Session设置部分中以下一项,代码如下: session.save_path = "N;/path" session.save_path = "C:/Temp" #此处以你自己设定的路径为准 这项设置提供给我们可以给session...