会话数据,即SESSON数据,默认存储在文件中。如果希望将SESSION数据存储在更快速的地方,更重要的是,如果网站是分布式部署的,SESSION数据存储在文件中,就不能满足要求。
要解决分布式会话问题,可以将会话存储在memcache。
1.安装好memcache服务端、PHP的memcache扩展。
2.在PHP的配置文件php.ini中更改SESSION相关的配置。
我的PHP配置文件 E:\wamp64\bin\apache\apache2.4.17\bin\php.ini 中,SESSION相关的配置是:
session.save_handler = files
session.save_path ="E:/wamp64/tmp"
如果有足够的权限,更好的做法是使用 session_save_path 和 session_set_save_handler 函数设置这两个配置。
3.重启服务器,运行网站,一切正常,感觉不到和之前有什么变化。但会话数据的存储位置的确改变了。
4.测试会话数据存储在哪里
A.在没有更改session配置之前,运行本地的网站,登录后台,然后查看 E:/wamp64/tmp,发现产生了SESSION文件,文件内存储了登录信息。
B.更改session配置后,将 E:/wamp64/tmp 清空,再次登录网站后台,能正常登录,但在 E:/wamp64/tmp 没有发现任何文件。
C.session可能已经存储到memcache中。但从memcache中获取session数据,却失败了。
我是这样获取的:
在session中存储了
$_SESSION['user'] = 'cg'
从memcache中以 user 为key获取值,失败了。是方式不对?还是key错误?
为了进一步证明session数据存储在memcache中,我停止了memcache,然后刷新网站,网站立刻变为非登录状态,重新登录,总是不成功。启动
memcache后,恢复正常。这足以证明session已经存储到memcache中。
memcache中存储的数据没有持久化存储,当它重启之后,之前所有的数据都会丢失。这会导致一个场景:一个网站将会话信息存储到了memcache中,
memcache突然重启,正在登录此网站的所有用户的会话信息全部消失,一刷新,全部变为非登录状态。
网友评论