我有一个自定义页面路由系统的PHP网站。php会话奇怪的行为
php脚本检查请求的uri并使用switch case
来确定需要加载哪个页面。每个页面都有自己的$page_id
。
这里是一个简化版本。
$page_uri = //code that extracts the relevent part of the uri
switch($page_uri){
case 'about':
$page_id = 'about';
break
case 'products':
$page_id = 'products';
break;
default:
$page_id = '404';
break;
}
include 'sessions.php'; //explanation about this after the code
include $page_id; //code that loads the page based on the $page_id
该网站的功能之一,我需要知道以前访问过的网页的$page_id
。
我正在使用这个会话。
session_start();
$previous_page_id = $_SESSION['current_page_id'];
$_SESSION['current_page_id'] = $page_id;
我因此存储以前$page_id
存储在一个会话变量在$previous_page_id
变量之前的会话变量被更新为当前$page_id
。
问题是它不起作用。 $previous_page_id
总是等于默认的$page_id
这是404。我知道实际的路由功能的作品,因为正确的页面被加载,如果我存储它后正确的回应会话的价值。
我注意到,如果我把以下部分放在一切之前,我可以得到正确的$previous_page_id
。
session_start();
$previous_page_id = $_SESSION['current_page_id'];
我错过了什么?你能想到我的代码或逻辑有什么问题吗?当涉及到PHP会话时,我应该注意到一些奇怪的怪癖吗?
谢谢。
更新
它似乎在页面的顶部添加session_start(); echo $_SESSION['current_page_id'];
使得价值棒。否则,当我将会话值转移到sessions.php中的$previous_page_id
时,会话值已更改为404.
任何人都可以理解这一点吗?
你也可以把整个代码。 – Robik 2011-04-05 17:21:33
那么,根据这个手册http://php.net/manual/en/function.session-start.php session_start()返回FALSE如果会议无法启动。尝试检查它的结果。 – Wh1T3h4Ck5 2011-04-05 17:24:54