我正在开发一个需要javascript和会话的页面.如果禁用了javascript,我已经有代码警告用户.现在,我想处理禁用cookie的情况,因为会话ID存储在cookie中.
我想到了几个想法:
解决这个问题的最佳方法是什么?谢谢
编辑
根据链接的文章,我提出了自己的方法,并认为我会分享,其他人可能会使用它,也许我会得到一些批评.(假设您的PHP会话存储在名为的cookie中PHPSESSID)
<div id="form" style="display:none">Content goes here</div>
<noscript>Sorry, but Javascript is required</noscript>
<script type="text/javascript"><!--
if(document.cookie.indexOf('PHPSESSID')!=-1)
document.getElementById('form').style.display='';
else
document.write('<p>Sorry, but cookies must be enabled</p>');
--></script>
Run Code Online (Sandbox Code Playgroud) 根据请求,您可以通过几种不同的方式判断会话是否已启动,例如:
$isSessionActive = (session_id() != "");
Run Code Online (Sandbox Code Playgroud)
要么:
$isSessionActive = defined('SID');
Run Code Online (Sandbox Code Playgroud)
但是,如果你开始一个会话,然后关闭它们,它们都会失败; session_id()将返回先前会话的ID,同时SID将定义.同样,如果您已经激活会话,此时调用session_start()将生成一个E_NOTICE.是否有一种理智的方法来检查会话当前是否处于活动状态,而不必求助于输出缓冲,关闭运算符(@session_start())或其他类似hacky的东西?
编辑:我写了一个补丁试图让这个功能包含在PHP中:http://bugs.php.net/bug.php?id = 52982
编辑8/29/2011:添加到PHP 5.4的新功能修复此问题:"通过新函数,session_status公开会话状态"
// as of 8/29/2011
$isSessionActive = (session_status() == PHP_SESSION_ACTIVE);
Run Code Online (Sandbox Code Playgroud)
编辑12/5/11:PHP手册上的session_status().