【发布时间】:2017-08-18 05:31:54
【问题描述】:
在我的安全站点 (https) 上,我设置了一个 PHP $_SESSION 变量。然后我使用header("location: http://...page.php") 将用户发送到我的http 站点上的php 页面,该页面位于同一台服务器上。由于标题语句中的 http:// URL(我假设),会话变量丢失了。如果不使用完整的 URL,我无法让 header("location: ...") 工作。因此,我尝试了来自stackoverflow - php session lost when switching 的以下提示,其他几篇文章都引用了该提示,但我最终得到了许多 error_log 警告条目,一旦我点击另一个需要 $_SESSION['loginUser'] 的页面,会话就消失了。
PHP 警告:session_start():会话 ID 太长或包含非法字符
通过的示例会话 ID:dlouenopfi3edoep3dlvne8bn1
在 https php 页面上创建会话的代码(注意此帖子标题位置不是真实的)
session_start();
$currentSessionID = session_id();
$_SESSION['loginUser'] = $username;
header("location: http://www.test.com/path/to/page/off-campus/cat_index.php?session=$currentSessionID");
在 http php 页面上接收会话的代码
// Retrieve the session ID as passed via the GET method.
$currentSessionID = $_GET['session'];
echo "sid: " . $currentSessionID;//a session id like above is displayed
// Set a cookie for the session ID.
session_id($currentSessionID);
session_start();
if(isset($_SESSION['loginUser'])){
$username = $_SESSION['loginUser'];
echo "Welcome: $username<br />";
} else {
require_once($_SERVER["DOCUMENT_ROOT"] . "/_includes/CASwrap.php");
}
我已经用尽了我的搜索。任何帮助将不胜感激。谢谢。
【问题讨论】:
-
你不能把文件从你的HTTP服务器复制到你的https吗?
-
只是为了确定你的意思是同一个主机?没有不同的子域?
-
想一想... 用户进入 HTTPS 站点 - 他们输入一些凭据和信息 - 可能存储在会话中 - 然后站点将用户重定向到主机和客户端之间的连接不再安全的 HTTP - 这不可能发生。您的整个网站应该在 http 或 https 上 - 你们都不能混合和匹配并期望服务器在安全和非安全位置之间愉快地浮动数据
-
有问题的页面是在许多页面中使用的包含。我试着把它移过来,但这造成了一个更大的问题需要解决。两个站点都在同一个主机/服务器上,但我认为根据定义它们都是主校区域的子域。这是一个中间步骤,直到制定移动整个站点的计划。
标签: php http https session-variables