0

我的网络应用程序有一个注销脚本,如下所示:

<?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();
        }

    }

?>

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

4

2 回答 2

1

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

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

您在另一篇文章中有更好的解释:

为什么php每次在测试环境(WAMP)中生成相同的会话ID?

于 2013-03-23T11:25:25.440 回答
1

您在注销代码中遗漏了一些内容,即存储在用户浏览器中的 cookie 值。PHP 函数 session_destroy(); 不会删除用户 cookie,您必须通过将到期时间设置为回溯日期或时间来手动取消设置它们。

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

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

于 2013-03-23T11:36:05.357 回答