欢迎来到天天文库
浏览记录
ID:12996180
大小:47.00 KB
页数:3页
时间:2018-07-20
《php session跨子域问题解决方案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Session主要分两部分:一个是Session数据,该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在另一个是标志着Session数据的SessionId,SessionID,就是那个Session文件的文件名,SessionID是随机生成的,因此能保证唯一性和随机性,确保Session的安全。一般如果没有设置Session的生存周期,则SessionID存储在内存中,关闭浏览器后该ID自动注销,重新请求该页面后,重新注册一个sessionID。如果客户端没有禁用Cookie,则Cookie在启动Session会话的时候扮演的是存储
2、SessionID和Session生存期的角色。两个不同的域名网站,想用同一个Session,就是牵扯到Session跨域问题!默认情况下,各个服务器会各自分别对同一个客户端产生SESSIONID,如对于同一个用户浏览器,A服务器产生的SESSIONID是11111111111,而B服务器生成的则是222222。另外,PHP的SESSION数据都是分别保存在本服务器的文件系统中。想要共享SESSION数据,那就必须实现两个目标:一个是各个服务器对同一个客户端产生的SESSIONID必须相同,并且可通过同一个COOKIE进行传递,也就是说各个服务器必
3、须可以读取同一个名为PHPSESSID的COOKIE;另一个是SESSION数据的存储方式/位置必须保证各个服务器都能够访问到。这两个目标简单地说就是多服务器(A、B服务器)共享客户端的SESSIONID,同时还必须共享服务器端的SESSION数据。有三种解决方法:1.只要在php页面的最开始(要在任何输出之前,并且在session_start()之前)的地方进行以下设置ini_set('session.cookie_path','/'); ini_set('session.cookie_domain','.mydomain.com'); ini_
4、set('session.cookie_lifetime','1800');2.在php.ini里设置session.cookie_path=/session.cookie_domain=.mydomain.comsession.cookie_lifetime=18003.在php页面最开始的地方(条件同1)调用函数session_set_cookie_params(1800,'/','.mydomain.com');我的解决方法是在入口出添加如下代码:ini_set('session.cookie_path','/');ini_set('sess
5、ion.cookie_domain','.domain.com');//注意domain.com换成你自己的域名ini_set('session.cookie_lifetime','1800');如图:站点一站点二 可以看到两个站点的PHPSESSID是一样的,当然也解决了跨子域名的问题
此文档下载收益归作者所有