【问题标题】:php session doesn't workphp会话不起作用
【发布时间】:2012-10-10 12:29:18
【问题描述】:

它应该如何工作: Index.php 是安全页面。它包括 check.php,它检查您是否有一个会话 = 好。如果还没有,您没有登录 -> 注销,删除会话。但是不管用,总是注销,就像我没登录一样……

index.php

include ‘check.php’;
echo "logged in";

check.php

session_start();
if($_SESSION[‘login’] != ‘good’) {
unset($_SESSION[‘login’]);
unset($_SESSION[‘name’]);
header(‘Location: login.php?logoff’);
exit();
} 

Login.php

if(isset($_POST[‘login’])) {
$gb = array();
$gb[‘user1’] = ‘pass1’;
$gb[‘user2’] = ‘pass2’;
if(isset($gb[$_POST[‘username’]]) && $gb[$_POST[‘username’]] == $_POST[‘password’])
{ 
$_SESSION[‘login’] = ‘good’;
$_SESSION[‘name’] = $_POST[‘name’];

header("Location: index.php");
} else {

header("Location: login.php?wrongpass");

}

} else { ?>
Login Form
<?php } ?>

希望有人能帮帮我!

【问题讨论】:

  • login.php 是否包含session_start();?
  • 您的单引号看起来不对,是复制/粘贴问题还是您设置它们的方式,‘ 和 ’ 应该是 ' 或 @ 987654329@
  • 当您的登录声明为真时,您缺少的session_start();。如果那不存在,php 将不会将其识别为会话。

标签: php session login


【解决方案1】:

您应该验证您在 login.php 中启动了会话。

【讨论】:

    【解决方案2】:

    在所有页面中输入session_start();

    【讨论】:

    • 或者在 php.ini 中这样做:session.auto_start On
    【解决方案3】:

    你需要在所有页面的顶部有 session_start(),你没有显示登录页面的会话开始。

    (感谢 Danny 证明我不会打字)

    【讨论】:

    • 哈,我想了这么多..虽然我自己无法编辑它——我想我最好在 OP 试图复制/粘贴的情况下添加它
    【解决方案4】:

    检查您的 php.ini 中是否有 register_globals 已打开

    【讨论】:

      【解决方案5】:

      首先检查您要使用会话变量的页面会话是否启动,如果会话不是 stat 然后启动它。

      这是 php 文件的第一行。

      会话检查的代码是:

      if(!session_id())
      {
          session_start();
      }
      

      【讨论】:

        【解决方案6】:
        if($count==1){
            session_start();    
            $_SESSION['Username'] = $UserName;
            $_SESSION['Password'] = $password;
            UpdateOnlineChecker($Session);
            header( "Location: http://". strip_tags( $_SERVER ['HTTP_HOST'] ) ."/newHolo/" );
            exit;
        }
        else {
            echo "Wrong Username or Password";
        }
        

        看看我的代码。它检查语句是否为真(对我来说,如果有一行带有我执行的查询语句)。然后我开始一个会话,基本上我会定义全局会话变量,向我的数据库发出一个查询以更新会话,然后参考。

        你缺少一个 session_start();在你的 if true 块中。

        【讨论】:

        • 嗯,不是在我真正的区块中,而只是在页面中(也可以在顶部)。不过还是谢谢!
        【解决方案7】:

        使用一个用于action的文件如index.php有代码:

        session_start();
        if(isset($_POST['login']) && isset($_POST['password'])){
           // login
           header('Location: (here is some page)');
        }
        if(!isset($_SESSION['user']){
          // @todo some action
        } else {
          require_once('login.php');
        }
        
        if(isset($_GET['logout'])){
           unset($_SESSION['user']);
           header('Location: (here is some page)');
        }
        

        【讨论】:

          【解决方案8】:

          我认为问题是标题:

          ('location:------.php);
          

          您的托管服务器没有运行它。 你可以使用这个:

          echo "<script>window.location.href='-----.php'</script>";
          

          【讨论】:

            猜你喜欢
            • 2014-07-09
            • 2013-02-09
            • 2014-02-08
            • 1970-01-01
            • 2020-05-26
            • 2013-11-10
            • 2014-02-13
            • 2015-09-30
            相关资源
            最近更新 更多