万事开头难,刚开始不一定能写好博文,不,应该是一定写的不好,但我定会用心。
以前只知道session是存在服务器,cookie是存在客户端,至于它们工作的原理就不了解了。为了巩固自己记忆,小小的总结了下。
一. 首先session,cookie是什么。
session是用户登录网站后存储在服务器的信息,而cookie就是验证用户、获取session中存储信息的凭证。
每当我们登陆网站成功后,服务器都会生成一个session用来记录当前登陆用户的信息,同时网站会要求我们的浏览器对应的存储一个cookie(一般是由服务器生成的PHPSESSID)。浏览器每次发送请求都要将cookie传给服务器用于验证用户是否处于登陆状态。
二. session_start()
当程序运行到 session_start()的时候,服务器就生成一个用于存储session信息的文件,同时会生成一个唯一的sessionId。sessionId(即PHPSESSID)则以cookie的方式保存在客户端。
三. session的存储方式。
session默认是以文件的方式存储(php.ini文件中有一行是:session.save_handler = files)。
文件存储有两个弊端,〈1〉读取session比较慢,用户量少的话还行,但用户量大的话就会导致大量的输入输出的冗余,这样服务器可能就撑不住了〈2〉多台服务器之间session的共享比较复杂(看过别人用NFS方式实现,不过我自己倒没有尝试过)。
数据库存储不存在共享的问题,但是频繁的读写也是很消耗资源的。
那有没有更好的方法,当然有了,就是将session存放在缓存中。这里介绍两种缓存(redis和memcache)。
redis包含字符串、列表、集合、哈希、有序集合这五种数据结构。memcache只支持key-value的键值对应的存储,所以说redis比memcache强大许多。但是memcache更轻量级,redis对内存消耗很大。如果你的网站的缓存只用于存储session。我觉得memcache会更好一些。
session存储设置方式(以memcache为例):
ini_set(‘session.save_handler‘, ‘memcache‘);
session_save_path("tcp://127.0.0.1:11211");
注:可能有理解错误的地方,而且还有些地方搞不太懂,以后会修改添加。
原文:http://www.cnblogs.com/melody68/p/5004828.html