PHP会话不续订

时间:2013-03-23 11:19:04

标签: php mysql sessionid

我的网络应用程序的注销脚本如下:

<?php
session_start();
require_once("config.php");
$logout_connect = mysql_connect($db_host, $db_user, $db_pass);
    if (!$logout_connect){
        die('Impossibile connettersi: ' . mysql_error());
    }else{
        mysql_select_db($db_name, $logout_connect);
        mysql_query("DELETE FROM valutazioni_recenti WHERE idutente = '".$_SESSION['userid']."' ");
        if(mysql_query("DELETE FROM sessions WHERE ssnid = '".$_SESSION['ssnid']."' AND userid = '".$_SESSION['userid']."'")){
            $_SESSION = array();
            $session_id = session_id();
            session_destroy();
            mysql_close($logout_connect);
            header("location: login.php?logout");
            exit();
        }

    }

?>

它让我正确地注销用户,但是,当我在登录时保存数据库中的会话数据并在注销时删除它们时,我可以看到,如果我在登录时再次登录时使用会话ID,如“096c02aefbb34jd175bfa89d4ec1235”它给了我与该特定用户相同的sessionid。 这是正常的吗?有没有办法改变它?我只需要将它(或m5d)与登录时间混合起来吗?

2 个答案:

答案 0 :(得分:1)

这是完全正常的,不用担心。其他一些人在StackOverflow中询问了同样的事情。

这是因为您的浏览器中存储了cookie,因此要“修复”,您必须删除cookie,或者使用PHP重新生成ID。

您可以在另一篇文章中找到更好的解释:

why is php generating the same session ids everytime in test environment (WAMP)?

答案 1 :(得分:1)

您的退出代码中缺少某些内容,即您在用户浏览器中存储的Cookie值。 PHP函数session_destroy();不删除用户cookie,您必须通过设置到期日期或时间的到期时间来手动取消设置。

setcookie ("TestCookie", "", time() - 3600);  //will set expiry time one hour back

因此,如果您不取消设置用户浏览器的cookie,则每次进行新登录时都会占用相同的会话ID。