【问题标题】:PHP Session variables disappearing?PHP Session 变量消失?
【发布时间】:2012-06-11 08:02:22
【问题描述】:

我有 3 个页面,login.php、login_validate.php 和 userhome.php。我的问题是登录信息已正确传递给 login_validate.php,但当 login_validate 重定向到 userhome.php 时似乎消失了

任何帮助将不胜感激。

登录.php

<form name="login" action="login_validate.php" method="post">
    Username: <input type="text" name="myusername" /><br />
    Password: <input type="password" name="mypassword" /><br />
    <input type="submit" value="Login" />
</form>

login_validate.php(我知道,很长)

<?php

  include'connect.php';

  // username and password sent from form
  if(isset($_POST['myusername']) and isset($_POST['mypassword'])){
    $myusername=$_POST['myusername'];
    $mypassword=$_POST['mypassword'];
  }else{
    header('Location:login.php?failatvalidate');
  }
  // 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);

  $mypassword = hash('sha256', $mypassword);

  $sql="SELECT * FROM users 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 "userhome.php"
  $_SESSION['myusername'] = $myusername;
  $_SESSION['mypassword'] = $mypassword;

  print '<pre>';
  var_dump($_SESSION);
  print '</pre>';

  echo "<a href='userhome.php'>Home</a>";
  }
  else {
    echo "Wrong Username or Password";
  }
?>

userhome.php

<?php
  error_reporting(E_ALL ^ E_NOTICE);
  ini_set('display_errors',1);

  session_start();
  if(!isset($_SESSION['myusername'])){
    echo "error :( ";
  }else{
    echo "Logged in as ".$_SESSION['myusername']."&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<a href='logout.php'>Log out</a><br /><br />";
  }
?>

【问题讨论】:

  • 您是否在 login_validate.php 中的任何位置调用 session_start()
  • @user1436735 为什么你认为你不必这样做?
  • 这有点令人困惑。如果 PHP 找不到变量,它会自动创建它,所以当他在第一页访问 $_SESSION 时,它似乎已经存在。容易犯错误!
  • 这就是为什么它看起来像是保存了数据,但实际上它创建了一个 $_SESSION 变量,实际上并没有对会话做任何事情:)

标签: php session variables


【解决方案1】:

您需要在每个使用会话的脚本中调用 session_start()(以及在发送标头之前)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-28
    • 2014-03-23
    • 2016-06-06
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    相关资源
    最近更新 更多