【发布时间】:2015-03-27 20:45:41
【问题描述】:
我使用由我无权访问的团队管理的自定义会话代码管理网站(单页应用程序)。该应用程序是使用 appweb 定制构建的,与任何其他公共托管网站不同。此应用程序已在 http 和 https 中提供。在登录 http 后,如果用户登录 https,则尽管有以下代码,但未设置安全属性。
$https = $_SERVER['SERVER_PROTOCOL'] == 'https' ? 1 : 0;
ini_set("session.cookie_secure", $https);
//or
session_set_cookie_params(0, '/', null, $https, 1);
所以,我用上面的代码覆盖了会话 cookie,如下所示。它奏效了。
$sessname = session_name();
setcookie($sessname, $_COOKIE[$sessname], 0, '/', null, $https, 1);
异常是在两个选项卡中同时打开 http 和 https 时,这会导致自定义代码的会话无效。虽然这是一种消极的情况,但如果用户喜欢上述情况,可能会导致用户感到困惑。
我知道还有其他选项可以规避这一点,我一直在使用重定向之类的选项。但是我想检查一下我的替代品是否有效。
现在我一直在想的替代方案如下。
$https = $_SERVER['SERVER_PROTOCOL'] == 'https' ? 1 : 0;
$sessname = session_name();
$domain = $_SERVER['SERVER_PROTOCOL'].'.'.$_SERVER['REMOTE_ADDR'];
setcookie($sessname, $_COOKIE[$sessname], 0, '/', $domain, $https, 1);
在这里,我为相同的会话 ID 为 http 和 https 设置了不同的域名。登录 http 时,php 会话 id 的域为 http.10.10.10.1,登录 https 时,php 会话 id 的域设置为 https.10.10.10.1。它正在工作。
这是正确的方法。会有副作用吗?
【问题讨论】:
标签: php https session-cookies setcookie