我已尝试过每种方法在子域中启动会话但无法正常工作
以下是我的php登录代码示例
<?php
if(isset($_POST['login'])){
$username = $_POST['login'];
//Database Query
if($everythingIsOkay){
session_set_cookie_params(0, "/", ".example.com", false, false);
session_start();
$_SESSION['username'] = $username;
$_SESSION['ini'] = true;
session_id();
header('Location:accountt.php');
}
}?>
然后我在主域的每个页面上使用它
session_start();
这在sub.example.com上我把它放在每个文件的顶部
<?php
session_set_cookie_params(0, "/", ".example.com", false, false);
session_start();
?>
但仍然无法工作,有人可以告诉我该怎么做吗?
最后我做了这个功能,会话在子域工作,但在主域
我在登录脚本
的顶部添加了以下功能<?php
function new_session_start(){
session_name();
$secure = false;
// This stops JavaScript being able to access the session id.
$httponly = false;
// Gets current cookies params. //$cookieParams["domain"],$cookieParams["lifetime"]
$cookieParams = session_get_cookie_params();
session_set_cookie_params(0,
$cookieParams["path"],
'.example.com',
$secure,
$httponly);
session_start(); // Start the PHP session
session_regenerate_id(true); // regenerated the session, delete the old one.
}
new_session_start();
?>
然后在子域名页面
的顶部使用它<?php
session_set_cookie_params(0, "/", ".example.com", false, false);
session_start();
session_regenerate_id(true);
?>
答案 0 :(得分:0)
这里的问题与其他人的想法并不完全一样。在其他问题上,他们正在讨论如何为子域创建会话。看起来你在其他问题上做了一切正确的事情。这里的问题出在session_set_cookie_params(0, "/", ".example.com", false, false)
。
您没有将此代码添加到主页面,因此php将根据您的域名自行制作该Cookie。你的域名是example.com,所以你的php会像session_set_cookie_params(0, "/", "example.com", false, false)
那样。
然后当你去你的子域名时,他正在搜索.example.com,但他找不到它,因为你主域名的cookie是example.com而不是.example.com。
如何修复它:
将session_set_cookie_params(0, "/", ".example.com", false, false);
添加到您的主页面,以便他创建正确的Cookie。