我知道php中的会话,存储会话ID的cookie是在客户端设置的。客户端可以关闭这些cookie,我认为这会使会话无法工作。如何检测客户端是否禁用了会话cookie ?
您可以使用javascript navigator.cookieEnabled
。返回true
或false
。
if(navigator.cookieEnabled)
//do something
else
//do something else
假设您在前一个页面上启动了会话…
<?php
if(session_status() == PHP_SESSION_ACTIVE)
{
echo 'cookies & sessions enabled';
}
else
{
echo 'no cookies or sessions';
}
?>
或者您也在寻找非会话cookie。
<?php
if(!empty($_COOKIE))
{
echo 'cookies are tasty';
}
else
{
echo 'no cookies to eat';
}
?>
对于一个纯PHP解决方案,如果没有在前一页设置cookie,您无法检查会话/cookie是否启用
如果你知道你必须使用会话,通常的方法是在开始尝试设置cookie时立即重定向用户,然后在第二页抱怨cookie没有设置。
- 用户转到http://www.example.com
- 系统设置一个cookie(可能只启动会话,可能是一个专用的测试cookie)。
- 系统重定向到http://www.example.com/?cookietest=true
- 在该页,如果cookie没有被发送回来,向用户投诉。
另一方面,大多数情况下,如果您不需要登录某人,则不需要会话。如果你这样做,大多数用户会明白他们需要允许cookie,因为否则登录将失败。