首页 / PHP / 登录页面中的Php会话和发布问题
登录页面中的Php会话和发布问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了登录页面中的Php会话和发布问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5297字,纯文字阅读大概需要8分钟。
内容图文
![登录页面中的Php会话和发布问题](/upload/InfoBanner/zyjiaocheng/733/23a3c4b889bb4a4c93c428ebd72036c6.jpg)
好的,我们在这里得到了一些基本的HTML
<form action="main_login.php" method="post" style="text-align:right;">
Username:
<input type="text" name="username" value="" size=20 style="display:inline-block;margin-left:10px"required>
<br>
Password:
<input type="password" name="password" value="" size=20 style="margin-left:12px"required>
<br>
<input type="submit" value="Log In" style="margin-left:75px"=>
</form>
2个php文件主要是login.php
<?php
session_start();
$con = mysqli_connect("localhost", "root", "", "complaints");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
// MySQL injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($con,$sql);
// Mysql_num_row is counting table row
$count=mysqli_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 "login_success.php"
$_SESSION['username']=$myusername;
$_SESSION['password']=$mypassword;
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
mysqli_close($con);
?>
如果登录成功,则重定向到login.php
<?php
session_start();
if ( isset( $_SESSION['username'] ) ){
header("location:main_login.php");
}
?>
<html>
<body>
Login Successful
</body>
</html>
好的,所以,我是新的PHP,并不太了解会话.首先我使用了session_register和session_is_registered,但是我发现这些函数不再使用了.所以我转换为会议,但我的问题一直出现在这里
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
我不能使用$_POST从表单中获取数据.此外,我不知道我是否已正确放置会话功能.
编辑:html中的用户名和密码名称与php中使用的名称相同,我只是在这里输入错误.
解决方法:
Edit: Username and password names in html are the same which are used in php, i just misstyped here.
编辑:好的,所以你在表单字段中输入了一个拼写错误.您仍然在混合使用MySQL API,请参阅下面有关使用mysql_real_escape_string()的混合函数的更多信息.
查看name =“myusername”和您的POST分配以及密码.
他们不匹配.
将name =“myusername”更改为name =“username”
和name =“mypassword”to name =“password”
按照
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
使用过error reporting之后,会发出一个未定义的索引,并且已经发送了一个警告警告;见下文.
在<?php之前还有空格,这会导致标题之前的输出.删除它们. 另外,您将MySQL API与mysql_error()混合使用. mysql_error()应该读作mysqli_error($con),如下所示:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
应该读作
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
要么
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
> mysqli_和mysql_函数不会混合在一起.
关于安全
我注意到你可能用纯文本存储密码.如果是这种情况,则非常气馁.
我建议你使用CRYPT_BLOWFISH或PHP 5.5的password_hash()功能.对于PHP< 5.5使用password_hash() compatibility pack.
另外,关于SQL注入,use mysqli with prepared statements或PDO with prepared statements,它们更安全.
脚注
最好添加退出;每个标题后.
header("location:login_success.php");
exit;
并为所有标题.
编辑:
去掉
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
然后将其替换为:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
编辑#2:
这是我测试你的代码并获得成功的原因,因此我不知道你现在的代码有什么问题.
HTML表格
<form action="main_login.php" method="post" style="text-align:right;">
Username:
<input type="text" name="username" value="" size=20 style="display:inline-block;margin-left:10px"required>
<br>
Password:
<input type="text" name="password" value="" size=20 style="margin-left:12px"required>
<br>
<input type="submit" value="Log In" style="margin-left:75px"=>
</form>
MySQL的
<?php
$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';
$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
die('Connection failed [' . $conn->connect_error . ']');
}
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($conn,$_POST['username']);
$mypassword = mysqli_real_escape_string($conn,$_POST['password']);
echo $myusername; // echos
echo "<br>";
echo $mypassword; // echos
$sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($conn,$sql);
$count=mysqli_num_rows($result);
if($count==1){
echo "Yep";
}
else{
echo "nope";
}
N.B.:您还应该清除您的会话(destroy sessions),服务器上可能存在缓存旧用户名和密码的内容.
还要确保列中没有空格,类型正确且长度足以容纳数据.通常VARCHAR(255)绰绰有余,但在使用password_hash()生成的散列密码时建议使用,这是一个在存储密码时应该使用的函数.
也可以看看:
> What is the difference between session_unset() and session_destroy() in PHP?
在堆栈上.
内容总结
以上是互联网集市为您收集整理的登录页面中的Php会话和发布问题全部内容,希望文章能够帮你解决登录页面中的Php会话和发布问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。