php会话不在其他页面上工作

时间:2014-01-15 23:40:37

标签: php html session-variables

我正在创建一个人们需要登录才能更新的表单,登录和会话重定向工作正常。我已经尝试了数百种来自书籍和论坛的会话变体似乎没有我想做的事情,而且看起来很简单。 这是上一页的代码。

<?php
include("setting.php");

$sql="SELECT * FROM $tbl_namem";
$result=mysql_query($sql);

// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection 
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_namem 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["myusername"];
$_SESSION["mypassword"];
header("location: login_success.php");
}
else {
echo "Wrong Username or Password Please Try Again";
}
?>

如果用户名和密码已经过验证,我想加载接下来的两页。

3 个答案:

答案 0 :(得分:0)

在受密码保护的所有页面的顶部尝试此操作:

session_start();
if(!isset($_SESSION["myusername"])){
 header("location: logout.php");
 die();
}

我必须告诉你的会话变量,$ _SESSION [“myusername”];和$ _SESSION [“mypassword”]是空的,给它们这样的值,这样你最终可以使用它们。

创建一个页面注销,您可以在其中显示注销消息并添加:

session_start();
session_unset();
session_destroy();

这将破坏会话并注销用户。

* * 使用mysqli,您正在使用的mysql函数将很快从PHP中删除。

答案 1 :(得分:0)

if(empty($_SESSION['myusername']['mypassword'])) { 
   header("Location: login.php");  
   die("Redirecting to login.php"); 
} 
$username = $_SESSION['myusername']['mypassword'];

在下一页的TOP中尝试此操作。

答案 2 :(得分:0)

假设您的会话正常启动,这些行确实蹲下了:

$_SESSION["myusername"];
$_SESSION["mypassword"];

你可能指的是依赖register_globals的旧的,过时的,不安全的,可怕的示例,该示例已在几年前被删除,在此之前被弃用多年,以及自成立以来一直很糟糕。

基本上,每当你看到类似的东西时,变量只是神奇地从session / get / post / cookie / etc数组中存储/检索,这意味着它是旧的,不安全的,错误的

您需要将这些变量实际分配给$_SESSION数组,例如:

$_SESSION["myusername"] = $myusername;
$_SESSION["mypassword"] = $mypassword;

也就是说,session_start()通常应该是您创建的每个页面中的第一行,如果不是 。该函数需要在后台设置一些HTTP头,如果您的代码在此之前发生任何输出,则无法执行此操作,生成警告,并且您的会话根本不起作用。