PHP中的会话不会阻止用户

时间:2013-10-11 15:58:06

标签: php session

我正在创建一个带有登录的网站,并使用会话来阻止用户访问特定页面,除非他们已登录。我有一个会话检查器(在底部)并且它没有看到会话所以我不喜欢我认为我正确地注册了它但是我已经检查了几次网页并且它表明了我正在做的事情$ _SESSION ['myusername'] = $ myusername;是更新的方式,但我认为这是我的问题。非常感谢您花时间帮助我,我非常感激。

登录脚本:

         <table width="200" border="0" align="center" cellpadding="0" cellspacing="1">
         <tr>
        <form name="form1" method="post" action="checklogin.php">
         <td>
         <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
         <tr>
         <td width="78">Username</td>
         <td width="6">:</td>
         <td width="294"><input name="myusername" type="text" id="myusername"></td>
         </tr>
         <tr>
         <td>Password</td>
         <td>:</td>
         <td><input name="mypassword" input type="password" id="mypassword"></td>
         </tr>
         <tr>
         <td>&nbsp;</td>
         <td>&nbsp;</td>
         <td><input type="submit" name="Submit" value="Login"></td>
         </tr>
         </table>
         </td>
        </form>
         </tr>
         </table>

检查登录程序:

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$encrypted_mypassword=md5($mypassword);


$sql="SELECT * FROM users WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
$_SESSION['myusername'] = $myusername; 
header("location: control.php");
}
else {
header("location: failed.php");
}
?>

我添加到我不想允许访问的页面的会话横幅,除非已登录:

<?php
session_start();
if( isset($_SESSION['myusername']) ){
header("Location: login.php");
}
?> 

最后我的退出脚本:

<?php
session_start();
$_SESSION = array(); 
session_unset();
session_destroy();

header("Location:login.php");
exit();
?>

非常感谢任何帮助。我为这么多信息道歉,只是想确保列出所有内容。我不确定我做错了什么。我有另一个脚本,我正在使用它来查看会话是否正在运行,我甚至没有在那里看到会话。

<?php
$sid = session_id();
if($sid) {
echo "Session exists!";
} else {
session_start();
}
?>

1 个答案:

答案 0 :(得分:2)

在每个对会话或$ _SESSION vars做任何事情的页面上都需要session_start(),因此将其添加到Check for Login Procedure。

而且:

if( isset($_SESSION['myusername']) ){
header("Location: login.php");

应该不是! :

if( !isset($_SESSION['myusername']) ){
header("Location: login.php");