ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

跨子域的PHP会话2

2019-12-01 17:31:27  阅读:260  来源: 互联网

标签:debian cross-domain session php


这是PHP Sessions across sub domains的补数
我尝试了该问题上显示的内容,但发现没有给出问题.

因此,我需要跨子域(从www.example.com到forum.example.com)进行会话

我在www.example.com上所做的是

session_name("a_name");
session_set_cookie_params(0, '/', '.example.com');
session_start();

echo session_id();
$_SESSION['test'] = 123;

在forum.example.com上

session_name("a_name");
session_set_cookie_params(0, '/', '.example.com');
session_start();

echo session_id();
print_r($_SESSION);

session_id完全相同,但是$_SESSION不输出任何内容.
如何使forum.example.com输出123?

我尝试了session.cookie_domain = .example.com,但没有任何改变

当我进入forum.example.com时,它破坏了www.example.com会话,并且以另一种方式执行了相同的操作,例如是否检测到它来自另一个子域并为了安全而删除了所有内容.

这两个子域位于同一台Debian服务器上

我注意到的另一件事是,当我设置session.cookie_domain时,没有session_name和session_set_cookie_params,它仍然具有完全相同的session_id.

谢谢

解决方法:

好的,我已经考虑了一段时间了,我想我已经知道了.

首先,第一件事:由于您从两台服务器上获得了相同的会话ID,因此我们可以排除所有与Cookie相关的问题.显然,您已经在www.example.com上成功创建了一个名为a_name的cookie(尽管我叫recommend only alphanumeric characters for that cookie name),并在forum.example.com上成功读取了该a_name cookie.但是,就像您说的那样,您没有从forum.example.com获得任何数据. session.cookie_lifetime = 0并不是问题:这仅表示session cookie remains until the browser is closed.

我们应该进一步研究PHP的会话处理.您使用session_id()读取的会话ID是指服务器上的文件.通常,该文件位于/ tmp / sess_ $session_id中.该文件的内容是$_SESSION数组,已序列化. (请记住,数据是PHP中的serialize()的数据为not serialized the same way,但这并不重要.)

我认为这是与文件权限相关的问题:

> / tmp / sess_ $session_id文件是使用www.example.com的用户和组设置的.
> forum.example.com尝试打开/ tmp / sess_ $session_id,但没有适当的权限.
>结果是,当尝试print_r($_ SESSION);时,结果为空.

解:
检查服务器的配置文件,以确保www.example.com和forum.example.com以“同一用户和组”身份运行.那很关键!对于Apache,找到您的* .conf文件:

User youruser
Group yourgroup

对于nginx,找到nginx.conf:

user youruser yourgroup;

如果不能更改服务器配置文件,则应确保运行两个站点的用户在同一组中.

您可以通过以下方法首先验证www.example.com,然后通过SSH在服务器外壳中sudo ls -ltc sess_ *加载(找到以您的$session_id结尾的sess_),以验证是否存在此问题.接下来,加载forum.example.com,然后再次加载sudo ls -ltc sess_ *,以查看用户和/或组的更改.

标签:debian,cross-domain,session,php
来源: https://codeday.me/bug/20191201/2082280.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有