会话不是从我的子域php

时间:2016-10-28 16:15:25

标签: php session cookies

我已尝试过每种方法在子域中启动会话但无法正常工作

以下是我的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);
?>

1 个答案:

答案 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。