0

我创建了一个简单的 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>");
} 
?>

当我刚刚将登录设置为“是”然后使用该行时它起作用了

if(!isset($_SESSION['loggedin']))

但是,当我尝试在此示例 1 中分配登录的数字时,然后让检查器检查它是否不是数字 1 则死亡,如下所示:

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

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

4

3 回答 3

3

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

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

但是,更好的选择是:

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

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

if(!isset($_SESSION['loggedin']) || "1" != $_SESSION['loggedin'])
于 2012-09-03T11:27:22.173 回答
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'];
    } 
}
?>
于 2012-09-03T11:28:14.567 回答
1

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

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

如果 on 的值strcmp相等,则计算结果为 0。如果str1小于str2则返回 < 0,如果str1大于str2则返回 > 0。

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

于 2012-09-03T11:43:37.310 回答