Php 我必须登录两次,才能登录?
我的网站有一个登录脚本,出于某种原因,你必须登录,然后它返回到登录页面,然后你再次登录,这很好,它必须与登录脚本有关,但不确定在哪里Php 我必须登录两次,才能登录?,php,Php,我的网站有一个登录脚本,出于某种原因,你必须登录,然后它返回到登录页面,然后你再次登录,这很好,它必须与登录脚本有关,但不确定在哪里 <?php $host="localhost"; // Host name $username=""; // Mysql username $password=""; // Mysql password $db_name=""; // Database name $tbl_name="members"; //
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// 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);
$sql="SELECT * FROM $tbl_name 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){
session_start();
session_regenerate_id();
$_SESSION['SESS_USERNAME'] = $myusername;
$_SESSION['SESS_PASSWORD'] = $mypassword;
session_write_close();
header("location: login_success.php");
}
else
{
include("loginhtml.html");
}
?>
然后是checklogin(位于每页的顶部)
您需要这样做
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
session_start();
if(isset($_POST))
{
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// 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);
$sql="SELECT * FROM $tbl_name 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){
session_regenerate_id();
$_SESSION['SESS_USERNAME'] = $myusername;
$_SESSION['SESS_PASSWORD'] = $mypassword;
session_write_close();
header("location: login_success.php");
}
else
{
include("loginhtml.html");
}
}
按照这个图
index.php
-db connect
-if $_POST and ok
--redirect to loginsuccess
else
--show loginerror
-if no session
show login form
首次尝试登录时,$count
中的值是多少?在获取num_行并在第一次尝试登录后告诉我们输出后,能否添加一个var_dump($count)
?很抱歉,我不太熟悉PHP,只是学习而已。你不需要在会话中存储密码。只需在会话中查找用户名,它的工作原理也一样(只有您有权访问$\u session
,因此如果用户名存在是因为您在用户输入正确的登录信息时将其放在了那里)。此外,您应该使用像sha1这样的散列算法将加密的密码存储在数据库中(除此之外,使用satting和strenging,但目前至少使用sha1)。这就是现在的checklogin,对吗?我是否必须修改我的第一个脚本,因为它现在得到了相同的,所以我只是把该脚本作为loginok,并保留checklogin脚本的原样?谢谢你可以把代码放在index.php的上面/下面(取决于如果访问者没有登录,你想把登录表单放在哪里)好的,所以我把这个脚本放在第一个脚本的位置,它是loginok,在登录时被激活。然后激活checklogin(这是第二个脚本,位于每个页面的顶部),但我仍然需要再次登录。这与登录成功有关吗??它只是重定向到主页的html…按照这个图index.php-db connect if$\u POST和ok-重定向到LoginSAccess else-show login错误-if no session show login form所以我缺少no session部分?我该如何实现这一点?-如果没有会话,则包括登录表单checklogin就是这么做的,不是吗?
index.php
-db connect
-if $_POST and ok
--redirect to loginsuccess
else
--show loginerror
-if no session
show login form