Php 使用$\u会话检查用户登录
下面是以下脚本,第一个是checklogin.php。这将匹配存储在MYSQL数据库中的用户名和密码。一旦检查了这些信息,他们将通过使用重定向功能被发送到他们的个人页面 底部的php脚本是user1的登录页。我想在那里的东西,将确认这个人已正确登录,并没有权利查看此页面 目前,当我以user1身份登录时,我看到了3.php页面,也就是说,我没有正确登录。我知道我需要设置一个会话,如: $\会话[已登录']='y'; 我认为这应该放在密码与数据库中存储的密码进行比较的地方。目前,我无法输入我的登录详细信息,也无法在最后指向正确的文件。任何帮助都将不胜感激Php 使用$\u会话检查用户登录,php,session,Php,Session,下面是以下脚本,第一个是checklogin.php。这将匹配存储在MYSQL数据库中的用户名和密码。一旦检查了这些信息,他们将通过使用重定向功能被发送到他们的个人页面 底部的php脚本是user1的登录页。我想在那里的东西,将确认这个人已正确登录,并没有权利查看此页面 目前,当我以user1身份登录时,我看到了3.php页面,也就是说,我没有正确登录。我知道我需要设置一个会话,如: $\会话[已登录']='y'; 我认为这应该放在密码与数据库中存储的密码进行比较的地方。目前,我无法输入我的登录
<?php
session_start();
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
mysql_connect("localhost", "root", "root") or die(mysql_error()); //Connect to server
mysql_select_db("first_db") or die("Cannot connect to database"); //Connect to database
$query = mysql_query("SELECT * from users WHERE username='$username'"); //Query the users table if there are matching rows equal to $username
$exists = mysql_num_rows($query); //Checks if username exists
$table_users = "";
$table_password = "";
if ($exists > 0) {
//IF there are no returning rows or no existing username
//$_SESSION['logged in'] == 'y';
while ($row = mysql_fetch_assoc($query)) {
//display all rows from query
$table_users = $row['username']; // the first username row is passed on to $table_users, and so on until the query is finished
$table_password = $row['password']; // the first password row is passed on to $table_users, and so on until the query is finished
$table_id = $row['id'];
$page_id = $row['page'];
}
if (($username == $table_users) && ($password == $table_password)) {
// checks if there are any matching fields
if ($password == $table_password) {
$_SESSION['user'] = $username; //set the username in a session. This serves as a global variable
$_SESSION['logged_in'] = 'y';
//echo $table_id;
//echo $page_id;
redirect($page_id); //take the user to the page specified in the users table
} else {
echo "Login Failed";
}
} else {
print '<script>alert("1. Incorrect Password!");</script>'; //Prompts the user
print '<script>window.location.assign("login.php");</script>'; // redirects to login.php
}
} else {
print '<script>alert("Incorrect Username!");</script>'; //Prompts the user
print '<script>window.location.assign("login.php");</script>'; // redirects to login.php
}
function redirect($page_id)
{
/* Redirect browser */
header('Location: '.$page_id);
/* Make sure that code below does not get executed when we redirect. */
exit;
}
?>
和登录页
<?php
session_start();
//user logged in??
if ($_session['logged in'] != 'Y') {
//No- jump to log in page.
header("location: 3.php");
exit();
}
else
{
echo 'this works';
}
?>
您将会话定义为:
$_SESSION['logged in'] == 'y';
应该是:
$_SESSION['logged in'] = 'y';
if ($_SESSION['logged in'] != 'y') {
然而,你检查如下:
if ($_session['logged in'] != 'Y') {
应该是:
$_SESSION['logged in'] = 'y';
if ($_SESSION['logged in'] != 'y') {
您正在检查它是否是大写的Y,而它是小写的Y。所以它永远不会成功
另外,$\u SESSION
是一个会话,这意味着:
超全局变量-超全局变量是内置变量,总是
适用于所有范围
变量是区分大小写的。
如果($\u session['logged']!='Y')
这是您的问题。想想“字母箱”。思考超全局并进行比较;-)我瞎了吗?您在哪里设置$_会话['logged in']?如果不通过mysql传递用户输入密码,为什么要对其进行转义?出于隐私原因,您至少也应该在db中散列您的密码:)请。它们不再得到维护,而是在使用。学习代替,并考虑使用。它应该是……OP做了什么不正确的事?这里缺少一条重要信息。$\u会话['logged in']='y'代码>没有定义$\u会话['logged in']
,而是在进行比较。@Sean抱歉。我只是注意到OP的代码有很多问题。我错过了一对。@Fred ii-谢谢你的评论。我把它加到了答案上。