PHP登录会话无法在没有缓存的新窗口中加载第一页

PHP登录会话无法在没有缓存的新窗口中加载第一页,php,session,login,global,Php,Session,Login,Global,我正在白手起家地创建一个网站,目前正在处理会话内容。。我通常知道会话是如何工作的,以及如何在SESSION\u start()之后将内容存储到SESSION中,但我的主要问题是这一点。在清除缓存并打开新窗口后,第一次提交登录请求将无法正确提交,页面将重新加载,并且没有任何更改,但第一次之后,它工作正常。。。 my login.php处理a)post请求,或b)通过url登录(出于测试目的),因此指向“user/login.php?username=facebook&method=get”的链接将

我正在白手起家地创建一个网站,目前正在处理会话内容。。我通常知道会话是如何工作的,以及如何在
SESSION\u start()
之后将内容存储到
SESSION
中,但我的主要问题是这一点。在清除缓存并打开新窗口后,第一次提交登录请求将无法正确提交,页面将重新加载,并且没有任何更改,但第一次之后,它工作正常。。。 my login.php处理a)post请求,或b)通过url登录(出于测试目的),因此指向“user/login.php?username=facebook&method=get”的链接将发送到下面的代码,并将用户设置为以facebook的名称登录

<?php
session_start();
$method = $_GET['method'];
if($method == "get") $_SESSION['username'] = $_GET['username'];
else $_SESSION['username'] = $_POST['username'];
header('Location: http://www.imggroups.com');
?>


我不确定这是否重要,但是,在索引页上,我检查用户是否通过这样做登录。显然,先开始课程,然后做<代码>如果(设置($\u会话['username'])echo登录所需的任何内容。。else echo for not logging in…

问题是您正在将用户重定向到新页面,但旧页面尚未关闭,因此会话尚未保存

为了解决这个问题,我通常会设置一个interum页面,重定向到正确的页面


或者,您也可以使用session\u write\u close()(http://www.php.net/manual/en/function.session-write-close.php)在使用标题重定向之前,问题是您正在将用户重定向到新页面,但旧页面尚未完成关闭,因此会话尚未保存

为了解决这个问题,我通常会设置一个interum页面,重定向到正确的页面


或者,您也可以使用session\u write\u close()(http://www.php.net/manual/en/function.session-write-close.php)在使用标题重定向之前,如果这是login.php的总数,我相信有更简单的方法:

  • 如果用户名实际上是通过_GET还是_POST输入并不重要,那么使用_REQUEST,因为它封装了这两种方式

    if( isset($_POST['username'] ) {
        $_SESSION['username'] = $_REQUEST['username'];
    }
    
  • 如果这很重要,您不必信任或使用外部参数,只需查看其中的内容:

    if( isset($_POST['username'] ) {
        $_SESSION['username'] = $_POST['username'];
    } else if( isset($_GET['username'] ) {
        $_SESSION['username'] = $_GET['username'];
    } else {
        // whinge
    }
    

  • 我以前在使用PHP时没有遇到过这个问题,但您也可以执行session_write_close();强制它在重定向到另一页之前写出会话

    如果这是login.php的总数,我相信有更简单的方法:

  • 如果用户名实际上是通过_GET还是_POST输入并不重要,那么使用_REQUEST,因为它封装了这两种方式

    if( isset($_POST['username'] ) {
        $_SESSION['username'] = $_REQUEST['username'];
    }
    
  • 如果这很重要,您不必信任或使用外部参数,只需查看其中的内容:

    if( isset($_POST['username'] ) {
        $_SESSION['username'] = $_POST['username'];
    } else if( isset($_GET['username'] ) {
        $_SESSION['username'] = $_GET['username'];
    } else {
        // whinge
    }
    

  • 我以前在使用PHP时没有遇到过这个问题,但您也可以执行session_write_close();强制它在重定向到另一页之前写出会话

    事实是,它正在设置会话,但它将您重定向到另一个不允许会话的域。如果您访问的网站前面没有“www.”,然后被重定向到www版本,那么它会说您的会话不存在。使用以下命令:

    session_set_cookie_params(0, '/', ".imggroups.com");
    

    将它放在您的
    会话\u start()
    之前,它将适用于您站点的www和非www版本。

    事实是,它正在设置会话,但它将您重定向到不允许会话的其他域。如果您访问的网站前面没有“www.”,然后被重定向到www版本,那么它会说您的会话不存在。使用以下命令:

    session_set_cookie_params(0, '/', ".imggroups.com");
    

    将其放在
    会话_start()之前
    并且它将适用于您站点的www和非www版本。

    如果我在新选项卡或浏览器中注销后打开新窗口,并尝试登录在加载时卡住的登录页面,我也会遇到同样的问题,因为如果我在登录到仪表板的同一个卡住的窗口上刷新,我可以看到会话已经启动。

    但后来通过正确重定向解决了此问题:

    之前

    login.php (after ajax successful) --> index.php (if logged in) --> dashboard.php login.php (after ajax successful) --> dashboard.php login.php(ajax成功后)-->index.php(如果登录)-->dashboard.php 之后

    login.php (after ajax successful) --> index.php (if logged in) --> dashboard.php login.php (after ajax successful) --> dashboard.php login.php(ajax成功后)-->dashboard.php
    希望它能节省任何人的时间和精力,因为我遭受了很多痛苦

    如果我在新选项卡或浏览器中注销后打开新窗口,并尝试在加载时登录卡住的登录页面,我会看到会话已经启动,因为如果我在登录到仪表板的同一个卡住的窗口上刷新,我也会遇到同样的问题。

    但后来通过正确重定向解决了此问题:

    之前

    login.php (after ajax successful) --> index.php (if logged in) --> dashboard.php login.php (after ajax successful) --> dashboard.php login.php(ajax成功后)-->index.php(如果登录)-->dashboard.php 之后

    login.php (after ajax successful) --> index.php (if logged in) --> dashboard.php login.php (after ajax successful) --> dashboard.php login.php(ajax成功后)-->dashboard.php
    希望它能节省任何人的时间和精力,因为我遭受了很多痛苦

    我假设,因为你已经颠倒了正确答案,这对你不起作用,在这种情况下,可能尝试这里列出的内容:我假设,因为你已经颠倒了正确答案,这对你不起作用,在这种情况下,可能尝试这里列出的内容:或者,你可以使用标题(“location:index.php”);要使自己保持在同一个域上,您也可以使用header(“location:index.php”);保持自己在同一个领域