在我的安全网站(https)上,我设置了一个PHP $ _SESSION变量。然后我使用header("location: http://...page.php")
将用户发送到我的http站点上的php页面,该站点位于同一服务器上。会话变量丢失,因为header语句中的http:// URL(我假设)。我无法在不使用完整网址的情况下获取标题("位置:...")。因此,我尝试了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");
}
我已经筋疲力尽了。任何帮助将不胜感激。感谢。
答案 0 :(得分:0)
我解决了我的两个问题。
为了防止大量的error_log警告条目,我需要的是一个&#34;退出&#34; &#34;标题&#34;之后的声明言。
为了维护当前会话,我使用if语句来测试存储在变量$ currentSessionID中的当前会话ID。如果是,则将session_id设置为$ currentSessionID的值。如果不是,则不要使用$ currentSessionID变量设置session_id,因为它没有值。