PHP检测会话cookie是否被禁用


PHP detect if session cookies are disabled

我知道php中的会话,存储会话ID的cookie是在客户端设置的。客户端可以关闭这些cookie,我认为这会使会话无法工作。如何检测客户端是否禁用了会话cookie ?

您可以使用javascript navigator.cookieEnabled。返回truefalse

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没有设置。

  1. 用户转到http://www.example.com
  2. 系统设置一个cookie(可能只启动会话,可能是一个专用的测试cookie)。
  3. 系统重定向到http://www.example.com/?cookietest=true
  4. 在该页,如果cookie没有被发送回来,向用户投诉。

另一方面,大多数情况下,如果您不需要登录某人,则不需要会话。如果你这样做,大多数用户会明白他们需要允许cookie,因为否则登录将失败。