我的登录中的用户验证工作正常,唯一的问题是它不存储PHP SESSION。我已调试它以查看是否存储了任何会话,但它们不是。因为当我将用户发送到目的地页面时。
目标网页会检查if (!isset($_SESSION['username'])) { etc.. }
如果用户已登录或未登录。否则,它会将用户发送回登录页面。这就是出错的地方,它将用户发送回登录页面..并且当然要确认调试在所有内容上都是NULL。
PHP5:
<?php require ('../lib/config.php'); ?>
<?php
ob_start();
if (isset($_POST["username"]) && !empty($_POST["username"]) && isset($_POST["password"]) && !empty($_POST["password"])) {
$tbl_name='users';
$user_name='Username';
$pass_name='Password';
$salt='';
mysql_connect("$cchost", "$ccuser", "$ccpass")or die("cannot connect");
mysql_select_db("$ccname")or die("cannot select DB");
$myusername=$_POST['username'];
$mypassword=$_POST['password'];
$username=str_replace(' ','_', $myusername);
$password=hash('whirlpool', $salt . $mypassword);
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM $tbl_name WHERE $user_name='$username' and $pass_name='$password'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$donator=$row['donator'];
$player=$row['player'];
$count=mysql_num_rows($result);
if ($donator == '1') {
$_SESSION['donator'] = $donator;
}
if ($player == '1') {
$_SESSION['player'] = $player;
}
if($count==1){
$_SESSION['username'] = $username;
header("Location: index_ucp.php");
}
else {
header("Location: login_ucp.php?err=1");
}
}
else {
header("Location: login_ucp.php?err=9");
}
ob_end_flush();
?>
答案 0 :(得分:2)
确保在您要使用会话的所有网页的开头调用session_start()
,或在php.ini中设置session.auto_start = 1;
编辑,而我在这里让我骂你关于哈希密码的方式
一位聪明人曾经告诉我永远不要自己输入密码哈希。我现在将秘密告诉你。从php 5.3开始,php内置了散列和验证密码的功能。这些功能是:
password_hash()
和password_verify()
password hash接受一个参数,明文字符串为hash。 password verify有两个参数,明文字符串和哈希来测试匹配。容易腻。
//first we define how costly we want this to be for our cpus to calculate this hash.
$options = [
'cost' => 11,
];
$encrypted = password_hash($plainText, PASSWORD_BCRYPT, $options);//BCRYPT hashes look like so $ STRENGTH $. HASH / SALT
//this is useful because you never have to remember the salt or strength for a given password hash
if(password_verify($plainText,$encdata))
{
//good to go
}else{
//wrong password!
}
答案 1 :(得分:0)
使用session_start();在ob_start();
之后答案 2 :(得分:0)
如果
session_start();
在conf.php中使用。然后应该没有问题。
但是如果没有这样的声明,那么在开始时插入它。
或者包含File havind session_start();代码。