【发布时间】:2010-12-19 08:09:21
【问题描述】:
是否可以在不启动会话的情况下检查会话?
我问的原因是,我正在开发的应用程序有一个集成的管理界面。因此,当管理员登录时,他们浏览与用户相同的页面以进行编辑。字段和选项根据用户权限显示。
这会导致两个问题。
一个是因为正在启动会话,所以我无法启用浏览器缓存功能,因为发送的标头始终是:
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
我正在使用 smarty 输出模板,但无法实现:
$smarty->cache_modified_check = true;
发送一个未修改的 304,因为会话已经开始。使用上面的 smarty 参数对我来说是浏览器缓存的完美解决方案。
两个是因为每个使用该网站的人都在开始一个会话,会话目录中充满了不需要的会话。
如果用户未登录,我可以只销毁会话,但是每次加载页面时,用户都会创建和删除会话。这是不好的做法吗?
因此,如果我可以检查是否存在活动会话而不启动一个活动会话,那么我的所有问题都会得到解决。有任何想法吗?浏览器在请求页面时不发送会话cookie吗?
理想情况是这样的:
if (session_exists) {
session_start();
$users->priv = $_SESSION['priv'];
}
else {
$users->priv = guest;
}
------------- 回应托尼·米勒 ---------------
使用 session_id() 时,您必须已经启动了一个会话,它才能返回一个 id。
session_start();
echo session_id($_SESSION);
或者您可以在调用会话开始之前为会话设置一个 id
session_id("adfasdf");
session_start();
echo session_id($_SESSION);
//prints "adfasdf"
这些都没有帮助我。除非我遗漏了什么。
【问题讨论】:
-
不要打电话给
session_id("adfasdf"),而是打电话给session_id()。如果不存在会话,它将返回""。所以在打电话给session_start()之前做一个if(session_id())。 -
到目前为止,没有一个答案能正确解决这个问题:1)
session_id在session_start之前什么都不返回,2)PHPSESSIDcookie 不是一个可靠的参数,因为客户端可以提交任何他想要。
标签: php caching session smarty