PHP登录会话状态不会改变

时间:2016-03-21 20:32:54

标签: php

我有2个文件,在我的主要index.php上我有:

<?php
session_start();
$_session['login']=false;
??

我有另一个php文件,我存储导航栏,在这个php文件中我有

   if ($_SESSION['login']==true) { ?>
    show this menu.. user is logged in.
   <?php }else { <?
    show this one, not logged in.
   <?php } ?>

在我的login.php中我只是:

session_start(); 
$_SESSION['login']=true;

那么为什么当我调用login.php文件(点击一个按钮)会话状态没有改变时呢?

4 个答案:

答案 0 :(得分:1)

$_session是一个超全局,必须是大写的。

参考:

并且检查过错误会让你有所了解。

您还需要确保使用会话在所有文件中启动会话。

参考:

您还有2x ??,如果它是您真实代码的一部分我不会这样做。

如果是,则需要将其读作?>

旁注:

最好检查会话是否已设置,而不是检查它是否true|false

即:

if (isset($_SESSION['login']) && $_SESSION['login']==true)

或(非空)

if (!empty($_SESSION['login']) && $_SESSION['login']==true)

答案 1 :(得分:0)

首先,您使用$ _SESSION的所有文件必须在所有代码之前插入“session_start()”

答案 2 :(得分:0)

PHP中的Superglobals必须用大写字母书写。因此,这应该是大写的:

$_session['login']=false;

像这样:

$_SESSION['login']=false;

答案 3 :(得分:0)

好像我解决了我的问题..其中一个facepalm时刻。我没有检查会话是否已经设置,因此当index.php刷新时我不断将其重置为0。谢谢你让我知道它应该是在首都,不知道这一点。所以将它添加到我的index.php的顶部解决了它:

def sortData(data, choice):
    sorters = {"Average": lambda item: sum(item[1]) / len(item[1]),
               "Highest - Lowest": lambda item: item[1],
               "Minimum": lambda item: min(item[1]),
               "Maximum": lambda item: max(item[1])}
    if choice in sorters:
        sorter = sorters[choice]
        for name, score in sorted(data.items(), key=sorter, reverse=True):
            print("%s: %s" % (name, score))
    else:
        print("Unknown choice: " + choice)

data = {"Name": "1,2,3\n", "Name_2": "4,5,6\n", "Name_3": "10,9,8\n"}
data = {k: [int(x) for x in v.split(',')] for k, v in data.items()}
sortData(data, "Minimum")