php会话cookie与http和https的不同域名

时间:2015-01-28 19:39:29

标签: php https session-cookies setcookie

我管理一个网站(单页面应用程序),其中包含由我无法访问的团队管理的自定义会话代码。该应用程序是使用appweb自定义构建的,与任何其他公开托管的网站不同。这个应用程序已在http和https中提供。在用户登录https后登录http后,尽管有以下代码,但未设置安全属性。

$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。它正在发挥作用。

这是一种正确的方法吗?会有副作用吗?

1 个答案:

答案 0 :(得分:0)

为什么不将每个http请求重定向到https?使用PHP或htaccess:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

否则,我想你可能想看看那些类似的问题:
Session lost when switching from HTTP to HTTPS in PHP
Switching between HTTP and HTTPS pages with secure session-cookie
Cookie across HTTP and HTTPS in PHP

相关问题