仅在页面重新加载后才读取$ _SESSION

时间:2017-05-29 10:41:35

标签: php mysql session

我正在努力解决最近关于Sessions的一些事情,现在我需要帮助才能使用XAMPP来创建一个小页面。

我使用4页进行测试:
1)index.php是用户放置其ID和PW的页面 2)logon.php检查数据库是否有匹配的条目,并将einter重定向到index.phpprofile.php
3)profil.php回应所有相关的用户数据
4)logout.php

测试1:现在作为用户我执行以下操作:我从index.php开始并输入我的ID和PW。让我们说我的ID是1234. Logon说我很好,并将我重定向到profil.php,显示用户1234的数据。现在我可以注销,会话被删除,一切似乎都很好。

测试2:作为新用户,我从index.php开始,但现在我的ID为5678. logon.php告诉我一切正常,并将我重定向到profil.php,但它显示了第一次登录时的数据(1234)。我也可以移动到其他页面并返回profil.php,但在刷新页面(F5或CTRL + SHIFT + R)之前,数据将始终为用户1234。无论哪种方式现在它都说明了正确的5678数据。我可以退出,会话将再次被销毁。

以下是我处理会话的方式:

index.php

<?php
    @session_start();
?>

logon.php

<?php
    @session_start();
    session_regenerate_id(true);
?>

profile.php

<?php
    @session_start();
    if(!isset($_SESSION['personal_id'])){
        header('Location: /index.php');
        exit;
    }
?>

logout.php

<?php
    @session_start();
    $_SESSION = array();
    setcookie( session_name(), "", time()-3600, session_save_path() );
    session_destroy();
    session_write_close();
?>

所有标题都如下所示:

<head>
    <title>Scheffel Shoptime</title>
    <link href="style.css" rel="stylesheet" type="text/css">
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="cache-control" content="max-age=0" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="expires" content="0" />
    <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="Refresh" content="5;url=./index.php">
</head>

你能看到我哪里出错了,还是需要更多信息? 提前感谢所有试图提供帮助的人!

1 个答案:

答案 0 :(得分:0)

我实际上在缓存问题中找到了解决方案。我在标题中使用了这段代码:

<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

并将其更改为:

<?php
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
?>

我不知道HTML版本的哪个部分是错误的,但PHP版本运行正常,从而解决了我的问题。非常感谢您的想法和意见!