【发布时间】:2012-06-11 08:02:22
【问题描述】:
我有 3 个页面,login.php、login_validate.php 和 userhome.php。我的问题是登录信息已正确传递给 login_validate.php,但当 login_validate 重定向到 userhome.php 时似乎消失了
任何帮助将不胜感激。
登录.php
<form name="login" action="login_validate.php" method="post">
Username: <input type="text" name="myusername" /><br />
Password: <input type="password" name="mypassword" /><br />
<input type="submit" value="Login" />
</form>
login_validate.php(我知道,很长)
<?php
include'connect.php';
// username and password sent from form
if(isset($_POST['myusername']) and isset($_POST['mypassword'])){
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
}else{
header('Location:login.php?failatvalidate');
}
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$mypassword = hash('sha256', $mypassword);
$sql="SELECT * FROM users WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file "userhome.php"
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
print '<pre>';
var_dump($_SESSION);
print '</pre>';
echo "<a href='userhome.php'>Home</a>";
}
else {
echo "Wrong Username or Password";
}
?>
userhome.php
<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors',1);
session_start();
if(!isset($_SESSION['myusername'])){
echo "error :( ";
}else{
echo "Logged in as ".$_SESSION['myusername']."      <a href='logout.php'>Log out</a><br /><br />";
}
?>
【问题讨论】:
-
您是否在 login_validate.php 中的任何位置调用
session_start()? -
@user1436735 为什么你认为你不必这样做?
-
这有点令人困惑。如果 PHP 找不到变量,它会自动创建它,所以当他在第一页访问
$_SESSION时,它似乎已经存在。容易犯错误! -
这就是为什么它看起来像是保存了数据,但实际上它创建了一个
$_SESSION变量,实际上并没有对会话做任何事情:)