如果设置了cookie,是否可以启动新会话?

时间:2012-05-09 17:19:24

标签: php session authentication cookies remember-me

我希望在上一个会话被销毁后使用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'];
}
}

1 个答案:

答案 0 :(得分:1)

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

您可以检查是否选中了“记住我”复选框,然后生成一个UNIQUE和密钥,并将密钥放在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"]; 
}

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