将会话变量设置为数字,然后检查isset对该变量号

时间:2012-09-03 11:26:20

标签: php session login

我创建了一个简单的PHP登录系统,我在某些方面对PHP很新。登录系统不使用数据库作为其唯一的用户。

<?php
if(isset($_SESSION['loggedin']))
{
 die("You are already logged in!");
}
if(isset($_POST['submit']))
{
if ($_POST["Username"]=="****" && $_POST["password"]=="****")
{
$_SESSION['loggedin'] = "1";
print $_SESSION['loggedin'];
} 
}
?>

然后,对于每个其他页面,我都有一个带有if语句的PHP检查器:

<?php
session_start(); // NEVER forget this!
if(!isset($_SESSION['loggedin'] = "1"))
{
die("To access this page, you need to <a href='login.php'>LOGIN</a>");
} 
?>

当我将登录设置为'YES'然后使用行

时,它工作正常
if(!isset($_SESSION['loggedin']))

但是当我尝试在此示例1中为登录的数字分配时,然后让检查器检查如果它不是数字1然后死掉,就像这样:

if(!isset($_SESSION['loggedin'] = "1"))

它不起作用。谁能告诉我怎么会出错?

3 个答案:

答案 0 :(得分:3)

尝试使用==而不是=。使用'='将值1分配给会话变量。

if(!isset($_SESSION['loggedin'] == "1"))

然而,更好的选择是:

if($_SESSION['loggedin'] != "1")

使用Yoda conditions并检查是否设置了$ _SESSION ['loggedin'],即:

if(!isset($_SESSION['loggedin']) || "1" != $_SESSION['loggedin'])

答案 1 :(得分:1)

if( !isset($_SESSION['loggedin']) || $_SESSION['loggedin'] != "1" )

还要确保在第一个示例的顶部有session_start()。

<?php
session_start();

if(isset($_SESSION['loggedin']))
{
    die("You are already logged in!");
}

if(isset($_POST['submit']))
{
    if ($_POST["Username"]=="****" && $_POST["password"]=="****")
    {
        $_SESSION['loggedin'] = "1";
        print $_SESSION['loggedin'];
    } 
}
?>

答案 2 :(得分:1)

如果您使用String作为值,您还可以使用php函数strcmp($str1, $str2)进行二进制安全字符串比较。所以你可以做这个测试:

if(isset($_SESSION['loggedin']) && strcmp($_SESSION['loggedin'], '1') == 0)

如果strcmp上的值相等,则计算结果为0.如果str1小于str2则返回&lt; str1如果str2大于{{1}},则返回&gt; 0

了解更多信息:http://php.net/manual/en/function.strcmp.php