我创建了一个简单的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"))
它不起作用。谁能告诉我怎么会出错?
答案 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