【问题标题】:Passing a $_SESSION failed when creating the $_SESSION within Ajax function在 Ajax 函数中创建 $_SESSION 时传递 $_SESSION 失败
【发布时间】:2013-06-04 12:26:59
【问题描述】:

我有一个简单的注册表单,新来者将使用 ajax 函数进行注册。注册完成后,我在那里创建一个$_SESSION['is_logged']。 在 var_dumb 上,我知道 var 已设置。但是当在另一个页面上重定向时它是空的(我已经在两个页面上都包含了 session_start() ...... 我在网上某处读到:

“会话仅在页面加载/刷新时写入”。

是这样吗,还是得在我的代码中寻找一些其他的问题。

ajax:

        $.ajax({
        url:"../controllers/register.php",
        type:"POST",
        data:res,
        success: function(responce){
            if (responce==1) {
                $('#msg').addClass('msg-warning');
                $("#form").css('display',"none");
                $('#msg').append("<p>It seems that you have already submited the form. Click to "+
                    " <a href='login.php'>log-in</a> or to <a href='register.php'>register</a>.</p>");
            }
            else if (responce==2) {
                $('#msg').addClass('msg-warning');
                $("#form").css('display',"none");
                $('#msg').append("<p>You have successfully created account. Click to "+
                    " <a href='start.php'>welcome</a> to start your .</p>");
                $('.menu').append("<li><a href='logout.php'>Log out</a></li>")
            }
            else{
                $('#msg').text(responce);
            }

        },
        error: function(){
            $('#msg').text("Opss, try again");
        }
    });

register.php 文件:

    if (isset($_SESSION['submited'])) {
    echo 1;
    exit;
}

include_once('../models/functions.php');

// Give the post parametters to another var
$arr=$_POST;

// function for uploading
$reg = registerMe($arr);

if ($reg === true) {
    $_SESSION['submited']=1;
    $_SESSION['is_logged']=1    
    echo(2);
}   
else{
    echo($reg); 
}
exit;

session_start(); 包含在从 ajax 开始的第一页的标题中。第二页 - $_SESSION['is_logged'] 丢失了,再次是 session_start();是dc_header(); 函数的一部分。开始.php:

<?php
dc_header("Речник|Регистрация");

if (!isset($_SESSION['is_logged'])) {
    #header("location: ../views/login.php");
    var_dump($_SESSION);
}

?>

【问题讨论】:

  • 请贴出ajax代码
  • 逻辑上它应该可以工作。在您设置值的位置以及您要检查和重定向的位置发布代码。
  • 是在不同子域上的重定向页面,然后是您在 ajax 调用中使用的页面? www.url.com 和 url.com 被浏览器视为不同的子域,因此每个会话都不同。
  • start.php 的代码发布到您在会话中检查is_logged 的位置。
  • var_dump($_SESSION); 的输出是什么?

标签: php ajax session


【解决方案1】:

添加

session_start();

到 register.php 的顶部

您需要指定 session_start,以便您的服务器被命令执行“register.php”(来自 ajax、直接调用、浏览器脚本、cron 作业或任何您指定的可能)将处理执行和参考连接的客户端会话设置 $_SESSION 变量。服务器不会自己猜测这是“来自已经 session_start 页面的 ajax 调用”。您需要指定 register.php 中所做的任何事情都在当前客户端的会话中完成。

【讨论】:

  • 该死的,它奏效了。因此,尽管我曾经在执行 ajax 查询后将 session_start() 包含在页面标题中,但我需要再次声明 session_start()。
  • @Alordiel 任何关于用户的内容,都必须在他的会话中。所以,你从 session_start 开始。想象一下:如果您使用 ajax 注销,可以说 ajax_log_out.php,您可以看到 session_start(否则要注销哪个用户??)乐于提供帮助是至关重要的 :)
猜你喜欢
  • 2011-09-09
  • 2016-02-08
  • 2015-05-14
  • 1970-01-01
  • 2014-03-18
  • 2015-12-31
  • 1970-01-01
  • 2016-04-28
  • 2016-05-06
相关资源
最近更新 更多