0

我的控制面板用户中有一个页面,需要密码才能访问。

我这样做的顺序是:

  1. 使用我要访问的页面的参数转到“密码请求页面”。
  2. 检查密码,如果正确,则用“散列页面名称”填充会话变量
  3. 重定向到我要访问的页面。
  4. 此页面检查“哈希会话”是否与此“页面名称”匹配
  5. 如果匹配,则清除会话并显示整个页面,如果不匹配则重定向到初始页面。

问题是:在第 4 步,页面有时会读取后期会话更新。有时它没有显示任何值,但很多时候它显示正确的值,如果我刷新页面,会话仍然有正确的散列数据(在第 5 步,如果匹配,我已经清除了会话变量),怎么会?

我尝试用mysql的数据记录更改会话变量,但我得到了相同的结果。phpmyadmin 显示记录已设置,但页面显示没有数据集。否则,删除记录后,页面仍然显示之前的记录值。

这是否意味着缓存有问题?我也做了标题没有缓存,例如:

    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header('Pragma: no-cache');

但我得到的结果仍然相同。有什么建议吗?

更新:如果我不断刷新页面,可能刷新 3 或 5 次后,它会显示正确的值。如何使其实时?那么如果会话设置,页面可以直接检查设置的值,如果会话清除,那么页面会询问密码。?

4

1 回答 1

1

在步骤 4 中转储会话: print_r($_SESSION) 以查看它是否已设置。如果没有,您需要在进行重定向之前在第 2 步中进行设置。

也不要忘记在每个文件上调用 session_start() 。

于 2012-01-05T08:28:09.210 回答