PHP无法调用会话
最近我尝试为我的项目创建一个登录网页。 这就是index.html,一个登录页面,用户必须在其中登录。它将查询发送到 checklogin.php这是:PHP无法调用会话,php,session,login,Php,Session,Login,最近我尝试为我的项目创建一个登录网页。 这就是index.html,一个登录页面,用户必须在其中登录。它将查询发送到 checklogin.php这是: <?php ob_start(); $host="localhost"; // Host name $username=""; // Mysql username $password=""; // Mysql password $db_name="test"; // Database name $tbl_name="members
<?php
ob_start();
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name="test"; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
mysql_connect("wordshare.zxq.net", "754319_guest", "guest")or die("cannot connect");
mysql_select_db("wordshare_zxq_users")or die("cannot select DB");
// Define $myusername and $mypassword
$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 members 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 "login_success.php"
session_start();
session_register("myusername");
session_register("mypassword");
header("location:main.php");
}
else {
header("location:index.html");
}
ob_end_flush();
?>
我想你错过了这一行的一句话:如果(!session\u已注册(myusername)){
它应该是:如果(!session\u已注册(“myusername”){
我想你错过了这一行的一句话:如果(!session\u已注册(myusername)){
它应该是:如果(!session\u已注册(“myusername”){
您有两个会话(名称相同),这意味着第二个会话将覆盖第一个会话
手册上说,为什么要使用session\u register
从PHP5.3.0开始,此函数已被弃用,并从PHP5.4.0开始删除
改为:
键入$\u会话['myusername']=$usr;
和$\u会话['mypassword']=$pswd;
删除main.php中的第二个会话\u start()
键入if(设置($\u SESSION['myusername'))
而不是SESSION\u已注册()
您有两个会话(名称相同),这意味着第二个会话将覆盖第一个会话
手册上说,为什么要使用session\u register
从PHP5.3.0开始,此函数已被弃用,并从PHP5.4.0开始删除
改为:
键入$\u会话['myusername']=$usr;
和$\u会话['mypassword']=$pswd;
删除main.php中的第二个会话\u start()
键入if(isset($\u SESSION['myusername'])
而不是SESSION\u is\u registered()
您的代码有很多问题。无论您复制到哪里,这都是一个非常糟糕的示例。我有一些空闲时间,所以我首先强调我能看到的最严重的问题:
- 您在数据库中存储纯文本密码。这是非常严重的,因为如果有人入侵您的数据库,用户名和密码信息可以很容易地检索。这是一个非常常见的错误,但也是一个非常严重的错误。相反,请将密码散列,例如。该网站很好地解释了这一点所以如果你想学习的话,这个网站不仅有代码,还提供了一个很好的通用描述
- 代码要求启用
get\u magic\u quotes\u gpc
。相反,如果启用,它应该拒绝工作。假设启用magic quotes是一个安全问题,因为它会阻止您编写安全代码
您的代码:
建议:
(不再需要执行stripslashes
)
- 您使用的是其他过时的语言功能。这只是一个问题,您在复制代码时,没有使用最先进的代码。您有几个问题:
mysql.*
函数。改用PDO。它更简单易用,功能更强大。它通过提供所谓的预处理语句(也称为参数化查询)帮助您主动防止SQL注入。了解它,使用它
session\u register
和session\u是注册的
函数。这些函数用于在会话中注册全局变量。它们不安全且不推荐使用。请改用$\u session
超全局,就像您已经使用了$\u POST
超全局一样
- 一长串代码。您不使用子例程。尽管它们可能对您非常有帮助。了解如何编写,因为您可以像编写文本一样进行编程
例如:
<?php
require('my-functions.php');
$location = 'index.html';
if ($user = user_form_submitted() && user_is_valid($user)) {
user_login_into_session_($user);
$location = 'main.php';
}
redirect($location);
?>
正如您所看到的,这很容易阅读。然后定义完成此工作的函数,例如:
/**
* redirect request
*
* @param string $location
*/
function redirect($location) {
if (!headers_sent()) {
header("Location: " . $location);
}
printf('Moved <a href="%1$s">here</a>.', htmlspecialchars($location));
}
/**
*重定向请求
*
*@param string$location
*/
函数重定向($location){
如果(!headers_sent()){
标题(“位置:.$Location”);
}
printf('Moved'),htmlspecialchars($location));
}
这只是一个例子。所以你可以开始编程,甚至不用考虑所有不同的细节将如何工作
有关使用和提取函数以及使用PDO的相关解答:
- …还可以在网站上查看有关您的各种问题的更多信息
您的代码有很多问题。无论您复制到哪里,这都是一个非常糟糕的例子。我有一些空闲时间,所以我强调我能看到的,最严重的是:
- 您在数据库中存储纯文本密码。这是非常严重的,因为如果有人入侵您的数据库,用户名和密码信息可以很容易地检索。这是一个非常常见的错误,但也是一个非常严重的错误。相反,请将密码散列,例如。该网站很好地解释了这一点所以如果你想学习的话,这个网站不仅有代码,还提供了一个很好的通用描述
- 代码要求启用
get\u magic\u quotes\u gpc
。相反,如果启用,它应该拒绝工作。假设启用magic quotes是一个安全问题,因为它会阻止您编写安全代码
您的代码:
建议:
(不再需要执行stripslashes
)
- 您使用的是其他过时的语言功能。这只是一个问题,您在复制代码时,没有使用最先进的代码。您有几个问题:
mysql.*
函数。改用PDO。它更简单易用,功能更强大。它通过提供所谓的预处理语句(也称为参数化语句)帮助您主动防止SQL注入
if (get_magic_quotes_gpc()) {
throw new UnexpectedValueException('get_magic_quotes_gpc must be off.');
}
$mypassword = $_POST['mypassword'];
<?php
require('my-functions.php');
$location = 'index.html';
if ($user = user_form_submitted() && user_is_valid($user)) {
user_login_into_session_($user);
$location = 'main.php';
}
redirect($location);
?>
/**
* redirect request
*
* @param string $location
*/
function redirect($location) {
if (!headers_sent()) {
header("Location: " . $location);
}
printf('Moved <a href="%1$s">here</a>.', htmlspecialchars($location));
}