use*_*119 16 php session caching smarty
是否可以检查没有启动会话的会话?
我问的原因是,我正在开发的应用程序有一个集成的管理界面.因此,当管理员登录时,他们浏览与用户相同的页面以进行编辑.字段和选项基于用户privs显示.
这导致了两个问题.
一个是因为会话正在启动,我无法启用浏览器缓存功能,因为发送的标头始终是:
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Run Code Online (Sandbox Code Playgroud)
我使用smarty输出模板,并且无法实现:
$smarty->cache_modified_check = true;
Run Code Online (Sandbox Code Playgroud)
发送304未修改,因为会话已经启动.使用上面的smarty param将是我浏览器缓存的完美解决方案.
二是因为每个使用该站点的人都在启动一个会话,会话目录中充满了不需要的会话.
如果用户没有登录,我可以破坏会话,但是每个页面加载,用户将创建和删除会话.这是不好的做法吗?
因此,如果我可以检查是否存在活动会话而不启动,我的所有问题都将得到解决.有任何想法吗?浏览器在请求页面时是否发送会话cookie?
if (session_exists) {
session_start();
$users->priv = $_SESSION['priv'];
}
else {
$users->priv = guest;
}
Run Code Online (Sandbox Code Playgroud)
---------------回应Tony Miller ---------------
使用session_id()时,您必须已经启动会话以返回id.
session_start();
echo session_id($_SESSION);
Run Code Online (Sandbox Code Playgroud)
或者您可以在调用会话开始之前为会话设置ID
session_id("adfasdf");
session_start();
echo session_id($_SESSION);
//prints "adfasdf"
Run Code Online (Sandbox Code Playgroud)
这些都不能帮助我.除非我遗漏了什么.
Ton*_*ler 11
你想要的session_id(),如果没有定义会话,它返回空字符串.
文档表明如果没有启动会话,则返回空字符串(不是"无").
正如2014年的评论所指出的那样(我在2009年写了这个答案),如果有一个会话ID存储在其中的cookie可以被session_start()接收,那么会话就有可能开始.
从PHP 5.4.0开始,我们现在有了session_status(),但这在2009年并不存在.
您可以检查 PHPSESSID cookie 是否已设置(PHPSESSID 名称可能有其他名称,具体取决于您的服务器设置,请检查ini.session.name)。
但如果您担心的是污染您的会话目录,您可以调整 session.gc_probability、session.gc_divisor 和 session.gc_maxlifetime 以使它们更快地消失。
| 归档时间: |
|
| 查看次数: |
4623 次 |
| 最近记录: |