Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP无法调用会话_Php_Session_Login - Fatal编程技术网

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

最近我尝试为我的项目创建一个登录网页。 这就是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"; // 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));
      }