【问题标题】:A session had already been started - ignoring session_start() Xampp会话已经开始 - 忽略 session_start() Xampp
【发布时间】:2015-01-12 15:19:05
【问题描述】:
<?php
if($_SESSION['IS_LOGEDIN'] == 'Y')
{
header("location:index.php?page=home");
exit();
}
?>

我有问题,当我想进入该页面时,我有这个登录代码和这个错误。

会话已经开始 - 忽略 session_start()。

我尝试用这种方式编写代码,但是当我想进入页面时,不想加载:

<?php
   if(!isset($_SESSION['IS_LOGEDIN']) == 'Y')
    { 
        session_start(); 
 header("location:index.php?page=home");
    exit();
    } 
?>

解决办法是什么?

【问题讨论】:

  • 他们注销时您是否销毁了会话?
  • 如果您在包含/必需的文件中包含session_start();,则可能会导致它。不过,您应该将session_start(); 放在顶部。加上这个if(!isset($_SESSION['IS_LOGEDIN']) == 'Y'),你应该使用2个条件,而不是一个。检查是否未设置,&amp;&amp; 如果等于。

标签: php


【解决方案1】:

您的代码完全错误:

if(!isset($_SESSION['IS_LOGEDIN']) == 'Y')
   session_start()

您开始您的会话之后您尝试测试(大概)在会话中的值。同样,isset() 返回一个布尔值 true/false。它永远不会返回一个字符串,并且它会NOT返回您正在测试的变量中可能设置的任何值。所以基本上你有 if (true/false == 'Y') 这没有意义。

你可能想要更像这样的东西:

session_start()
if (!isset($_SESSION['IS_LOGEDIN']) || ($_SESSION['IS_LOGEDIN'] != 'Y')) {
    header('....');
}

“如果用户从未登录或未登录,则重定向”。

【讨论】:

  • 或者它的反向等效if (isset($_SESSION['IS_LOGEDIN']) &amp;&amp; ($_SESSION['IS_LOGEDIN'] == 'Y')){ // do something }else{ // do something different },这可能是OP想要实现的。不过,对于 OP 想要实现的目标,还有些不清楚。他们发布了两个不同的代码块;哪一个是好/坏,或者保留两者是任何人的猜测。 一个会话已经开始通常意味着在某处有另一个session_start();的副本。
【解决方案2】:

你可以试试

    <?php
session_start(); //must be at the start of the page
        if(!isset($_SESSION['IS_LOGEDIN']) or empty($_SESSION['IS_LOGEDIN'])) {
        $_SESSION['IS_LOGEDIN'] = 'Y';
        header("location:index.php?page=home");
    exit();
        }
    ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2017-05-20
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多