【问题标题】:session variables do not carry over to other pages会话变量不会延续到其他页面
【发布时间】:2017-09-11 01:41:42
【问题描述】:

php 会话变量不会从登录页面转移到主页。我可以看到变量以正确的值保存在 Web 服务器上的会话文件中,但第二页看不到它们。看起来它每次都在打开一个新会话。

即使成功登录,主页也会重定向回登录页面。我确实看到论坛上有很多关于这个问题的问题。但他们中的大多数都有相同的解决方案。使用 session_start()。

我在两个页面上都使用了 session_start()。

我的实际计划是使用 MySQL db 来保存会话数据。登录页面会将会话数据写入数据库,但主页不会读取它。我现在正在尝试使用本地文件来消除数据库或我使用数据库进行会话管理的代码的任何问题。我的本地文件也有同样的问题。

login.php

<?php
session_start();
if(isset($_POST['submit'])) {

//sanitize the data
$user = htmlspecialchars (stripslashes (trim ($_POST['user'])));
$password = htmlspecialchars (stripslashes (trim ($_POST['password'])));
$domain = htmlspecialchars (stripslashes (trim ($_POST['domain'])));
//validate user account from LDAP.
//once authorized, assign session variables and redirect to home page.
$_SESSION['accesslevel'] = "III";
$_SESSION['loggedin'] = "true";
$_SESSION['user'] = $user;
$_SESSION['name'] = $name;
header('location:home.php');
?>
`<!DOCTYPE html>
<html lang="en"> 
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Admin Login</title>
<link rel="stylesheet" href="css/login.css">
</head>
<body>
<div class="logincontainer">
<div class="login">
    <h1>Login</h1>
        <form action="<?php htmlentities(urldecode($_SERVER['PHP_SELF']));?>" 
method="post">
        <p><b></b><input type="text" name="user" value="" placeholder="ADM_5-
2-1" required autocomplete="off"></p>
        <p><b> </b><input type="password" name="password" value="" 
placeholder="Password" required autocomplete="off"></p>
        <p><select name="domain">
            <option value="DOMAIN">DOMAIN</option>
            <option value="domain">NANET</option>
            <option value="domain">EUNET</option>
            <option value="domain">APNET</option>
            <option value="domain">JPNET</option>
        </select>
        </p>
        <p class="submit"><input type="submit" name="submit" value="Login">
</p>
    </form>
</div>
</div><br>
<div class="error">
    <?php //print_r($_POST);?>
    <?php //var_dump($_POST);?>
    <?php //echo $msg;?>
</div>
</body>
</html>

home.php

<?php
session_start();
if ((!isset($_SESSION['loggedin'])) or ($_SESSION['loggedin'] != true)) {
header ("location: login.php");
}

<<<<html (php uses session variable (name) for user profile menu>>>>>

?>

【问题讨论】:

  • error_reporting(E_ALL); ini_set('display_errors', '1');

标签: php session-variables


【解决方案1】:

在您的login.php 中,将$_SESSION['loggedin'] = "true"; 更改为$_SESSION['loggedin'] = true;

【讨论】:

  • 是的,您(OP)将变量声明为“true”作为字符串,然后将其作为布尔值进一步检查。一个字符串不是假的,但它也不是真的。
  • @LouisLoudogTrottier 一个字符串 is 实际上,除非它是空的。
  • 太尴尬了!!!但对敏锐的眼睛表示敬意。几个小时以来,我一直在查看我的代码,试图找出它到底出了什么问题。
  • @Don'tPanic 据我所知,字符串被评估为真。 ('string' == true) 但是 ('string' !== true)。就像 1 是一个 int,不是 TRUE,但它评估为真。 (true === true) 但是 (true !== 1)。
  • @Louis 是的,当然字符串并不是真正的布尔值。在我的陈述“字符串为真”中,“是”被评估为“被评估为”。 ;-)
猜你喜欢
  • 2013-11-10
  • 2012-06-17
  • 1970-01-01
  • 2015-01-10
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多