0

一旦前一个会话被破坏,我想使用 cookie 开始一个新会话。

如果设置了 cookie,但没有设置会话,我可以自动创建仅使用 cookie 的新会话吗?

目前,我正在实现一个记住我的按钮。我的登录代码的一部分是

if($rememberme=="on"){
            $user_id=mysql_result($query_run,0,'id');
            setcookie("user_id",$user_id,time()+7200);
            $_SESSION['user_id']=$_COOKIE['user_id'];
            header('Location:front_page.php');
        }else if($rememberme==""){
            echo'ok';
            $user_id=mysql_result($query_run,0,'id');
            echo $user_id;
            $_SESSION['user_id']=$user_id;
            header('Location:front_page.php');

我需要这样做,因为如果设置了 cookie,但没有设置会话,它会在我的网站上导致各种错误。因为我在各个地方都使用了 $_SESSION['userid'] 变量。如果没有设置会话,我的许多功能都不起作用

编辑:我尝试了以下方法,但没有成功。

一旦前一个会话被破坏,我想使用 cookie 开始一个新会话。还有其他建议吗?

set_session_from_cookie();

function set_session_from_cookie(){
if(isset($_COOKIE['user_id'])){
    $_SESSION['user_id']=$_COOKIE['user_id'];
}
}
4

1 回答 1

1

我建议您对“记住我”功能使用不同的方式。

您可以检查是否选中了“记住我”复选框,然后生成唯一密钥和密钥并将密钥放入 cookie 和数据库中的某些用户行中。

现在,在页面顶部的某个地方,检查 cookie,然后如果需要,设置会话。

例子

if(isset($_COOKIE["c_key"]) && !isset($_SESSION["userId"])) 
{ 
     /*
      * Here check for users matching $_COOKIE["c_key"] in database and get the userId
      */
     $_SESSION["userId"] = $user_data["userId"]; 
}

并在任何地方继续使用会话。

于 2012-05-09T17:49:50.770 回答