Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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 - Fatal编程技术网

未存储PHP会话信息

未存储PHP会话信息,php,session,Php,Session,我正在尝试创建一个非常简单的网站,在这里您可以转到主页并登录,其代码如下example.org/login/index.php: <?php session_start(); $warning = $_GET['warning']; $nolog = $_GET['nolog']; $username = "Welcome, please log in"; if ($warning) { $username = "Wrong User

我正在尝试创建一个非常简单的网站,在这里您可以转到主页并登录,其代码如下example.org/login/index.php:

<?php
    session_start();
    $warning = $_GET['warning'];
    $nolog = $_GET['nolog'];
    $username = "Welcome, please log in";
    if ($warning) {
        $username = "Wrong Username/Password Combination";
    }
    if ($nolog) {
        $username = "Page inaccessible: Login required";
    }
    if ($logout) {
        $username = "Thank you for your session";
    }
?>
<!DOCTYPE html>
<body>
    <div class="center">
        <span class="warning"><?= $username ?></span>
        <form action="submit.php" method="post">
            <span class="formField">Username:</span><br>
            <input type="text" name="user" class="field">
            <br>
            <span class="formField">Password:</span><br>
            <input type="password" name="password" class="field">
            <br>
            <br>
            <input type="submit" name="submit" value="Submit" class="field">
        </form>
    </div>
</body>
</html>

用户名:

密码:


提交页面看起来是这样的(当我让它工作时,我不会像这样硬编码用户名和密码,现在只是为了简洁)example.org/login/submit.php

<?php
    session_start();
    $username = $_POST['user'];
    $password = $_POST['password'];

    if ($username == "admin" && $password == "12345") {
        $_SESSION['loggedin'] = TRUE;
        header("Location: http://www.example.org/welcome/");
        die();
    }
    else {
        $_SESSION['loggedin'] = FALSE;
        header("Location: http://www.example.org/login/index.php?warning=true");
        die();
    }
?>
<?php
    session_start();
    if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] == FALSE){
        unset($_SESSION);
        session_destroy();
        header("Location: http://www.example.org/login/index.php?nolog=true");
    }
?>
<!DOCTYPE html>
<body>
    Hi
</body>
</html>

欢迎页面如下所示example.org/welcome/index.php

<?php
    session_start();
    $username = $_POST['user'];
    $password = $_POST['password'];

    if ($username == "admin" && $password == "12345") {
        $_SESSION['loggedin'] = TRUE;
        header("Location: http://www.example.org/welcome/");
        die();
    }
    else {
        $_SESSION['loggedin'] = FALSE;
        header("Location: http://www.example.org/login/index.php?warning=true");
        die();
    }
?>
<?php
    session_start();
    if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] == FALSE){
        unset($_SESSION);
        session_destroy();
        header("Location: http://www.example.org/login/index.php?nolog=true");
    }
?>
<!DOCTYPE html>
<body>
    Hi
</body>
</html>

你好
我知道这是很多代码,但是当我第一次尝试在欢迎页面上运行它时,返回一个错误,说它不可访问,并将我发送回登录页面,但第二次它似乎工作正常,并让我登录。有人能理解为什么会这样吗

编辑:

<?php
    session_start();
    $warning = $_GET['warning'];
    $nolog = $_GET['nolog'];
    $username = "Welcome, please log in";
    if ($warning) {
        $username = "Wrong Username/Password Combination";
    }
    if ($nolog) {
        $username = "Page inaccessible: Login required";
    }
    if ($logout) {
        $username = "Thank you for your session";
    }
?>
<!DOCTYPE html>
<body>
    <div class="center">
        <span class="warning"><?= $username ?></span>
        <form action="submit.php" method="post">
            <span class="formField">Username:</span><br>
            <input type="text" name="user" class="field">
            <br>
            <span class="formField">Password:</span><br>
            <input type="password" name="password" class="field">
            <br>
            <br>
            <input type="submit" name="submit" value="Submit" class="field">
        </form>
    </div>
</body>
</html>

在深入研究之后,我发现这个问题只存在于Google Chrome和Firefox中,而不存在于Internet Explorer或Apple Safari等其他浏览器中。这将进入浏览器的渲染引擎。是否有人知道我可以使用会话ID的另一种方法,它可以在所有浏览器上绕过整个问题,或者是验证用户的另一种方法?

尝试使用以下方法

define('BASE_URL', 'http://www.example.org/');

if ($username == "admin" && $password == "12345") {
   $_SESSION['loggedin'] = TRUE;
   header("Location:".BASE_URL."welcome.php");
   exit();
} else {
   header("Location:".BASE_URL."index.php");
   exit();
}
在欢迎页面的开头添加以下内容

session_start();    
if(!isset($_SESSION['loggedin'])){
   header("Location:".BASE_URL."index.php");
   exit();
}

试着使用下面的方法

define('BASE_URL', 'http://www.example.org/');

if ($username == "admin" && $password == "12345") {
   $_SESSION['loggedin'] = TRUE;
   header("Location:".BASE_URL."welcome.php");
   exit();
} else {
   header("Location:".BASE_URL."index.php");
   exit();
}
在欢迎页面的开头添加以下内容

session_start();    
if(!isset($_SESSION['loggedin'])){
   header("Location:".BASE_URL."index.php");
   exit();
}

如果你注意我提到的文件名,我是说我将浏览器指向example.org/login/submit.php,然后将其转发到www.example.org/welcome/index.php


在Google Chrome和Mozilla Firefox中,他们关心的是在网站之前是否有一个www,而在Internet Explorer和Safari中,他们不关心这个区别。在我的服务器上,网站www.example.org和example.org是彼此的镜像(这是一个单独的安全问题),因此Google Chrome和Mozilla Firefox将以不同的方式对待它们,并为它们提供不同的$u服务器全局变量,然而,Internet Explorer和Safari并不关心这一区别。

如果你注意我提到的文件名,我是说我将浏览器指向example.org/login/submit.php,然后将其转发到www.example.org/welcome/index.php



在Google Chrome和Mozilla Firefox中,他们关心的是在网站之前是否有一个www,而在Internet Explorer和Safari中,他们不关心这个区别。在我的服务器上,网站www.example.org和example.org是彼此的镜像(这是一个单独的安全问题),因此Google Chrome和Mozilla Firefox将以不同的方式对待它们,并为它们提供不同的$u服务器全局变量,然而,Internet Explorer和Safari并不关心这一差异。

只要这是一个真正的点:
标题(“位置:http://www.example.org/welcome/");应该是:
标题(“位置:http://www.example.org/welcome.php");?嗯,当我尝试你的代码时,它对我有效。设置所有适当的会话等,并将我转发到正确的位置…@Rasclatt很抱歉删除我以前的评论,但我不想保留我的用户名/密码信息。我将链接更改为,但仍然不起作用。您能否在代码示例的上面标记每个代码块的每个页面的名称?比如welcome/index.php:cti将尝试它。您可以再次删除它。如果这是一个真实的点:
header(“位置:http://www.example.org/welcome/");应该是:
标题(“位置:http://www.example.org/welcome.php");?嗯,当我尝试你的代码时,它对我有效。设置所有适当的会话等,并将我转发到正确的位置…@Rasclatt很抱歉删除我以前的评论,但我不想保留我的用户名/密码信息。我将链接更改为,但仍然不起作用。您能否在代码示例的上面标记每个代码块的每个页面的名称?比如welcome/index.php:cti将尝试它。您可以再次删除它。如果这是一个真实的点:
header(“位置:http://www.example.org/welcome/");应该是:
标题(“位置:http://www.example.org/welcome.php");?嗯,当我尝试你的代码时,它对我有效。设置所有适当的会话等,并将我转发到正确的位置…@Rasclatt很抱歉删除我以前的评论,但我不想保留我的用户名/密码信息。我将链接更改为,但仍然不起作用。您能否在代码示例的上面标记每个代码块的每个页面的名称?比如welcome/index.php:cti将尝试它。您可以再次删除它..为什么定义基本URL会有所不同?至于将loggedin变量设置为true或nothing的方法,该方法没有帮助,但无论如何还是要感谢您,为什么定义基本URL会有所不同呢?至于将loggedin变量设置为true或nothing的方法,该方法没有帮助,但无论如何还是要感谢您,为什么定义基本URL会有所不同呢?至于您将loggedin变量设置为true或nothing的方法,该方法没有帮助,但还是要感谢您