【发布时间】:2012-10-03 00:04:16
【问题描述】:
我经营的网站可以通过不同的域访问:domainname.de、domainname.ch、domainname.at、domainname.es 等...
当我的客户想要付款时,我们会进入一个当然是 https 安全的付款页面。由于服务器限制,我只能拥有一个 SSL 证书,我只将其放在一个域上:domainname-secure.com。
因为我收取不同的价格,所以我需要知道用户属于哪个域,所以在重定向到 domainname-secure.com 时,我将域(例如 domainname.de)保存在会话变量 $_SESSION['domain_default'] 中并通过 sessionID 传递添加session_id=[session_id] 作为获取参数。
然后我检查我接受$_GET['session_id'] 并运行以下命令以使会话在 domainname-secure.com 上可用:
session_id($_GET['session_id']);
session_start();
当我自己测试它时,它工作得非常好,但是当有人访问 domainname-secure.com 并且没有设置 $_SESSION['domain_default'] 时,我会创建一个日志条目。
这种情况每天发生几次,但我真的不知道为什么这不起作用!我正在从许多不同的链接一次又一次地对其进行测试,但对我来说它工作得非常好。
你们中的一些人能想象为什么它有时不起作用吗?
将会话 ID 传递到另一个域是不是“好”或不安全,重定向后它不是总是可读的吗?
我知道你很难确定一个错误,但我正在寻找一些关于会话的已知问题,或者可能是如何以更好的方式做到这一点的提示?
【问题讨论】:
-
您的服务器设置是否包含 suhosin 补丁集?
-
为什么不直接将域添加到数据库中的用户?那么你就不需要这种不必要的复杂设置了。
-
@jeroen 他想获取他存储在
$_SESSION中的数据。这就是他通过 get 传递 session_id 的原因。我假设他从$_SESSION变量中获得了一些其他信息,除了原始域。否则他也可以将域名放在$_GET参数中。 -
@Mihai Stancu 不,
$_GET可以被操纵,如果用户属于某个域,则 db 是设置它的地方。除此之外,您不希望您的客户跳到另一个网站以获得更低的价格...... -
感谢您到目前为止的回答! @jeroen,但我在 SESSION 中还有其他信息需要访问