未打印会话变量

Session variables is not getting printed

本文关键字:变量 会话 打印      更新时间:2023-09-26

我有一个PHP后端脚本,我正在创建一个PHP会话变量:

if(!isset($_SESSION))
    session_start();
if(isset($_SESSION['uid']))
    unset($_SESSION['uid']);
$_SESSION['uid']=$this->_out;

在我的HTML脚本中,我使用以下方式访问它:

editor = new $.fn.dataTable.Editor( {
ajax: {url:"euseradd.php",complete : function(){var uid='<?php if(!isset($_SESSION)) session_start();if(isset($_SESSION["uid"])){echo $_SESSION["uid"];unset($_SESSION["uid"]);}?>';alert(uid)}},
......................
} );

但我没有得到值 - 我的警报打印空值。但是,当我尝试通过以下方式回显 WAMP 服务器 Apache 日志中的会话变量输出时:

echo 'Value is ' . $_SESSION['uid']

我收到一个错误"注意:数组到字符串的转换" - 我的目的是在某些日志中记录值,以查看后端也分配了什么值。

编辑:

我通过以下方式修改了 echo 语句:

echo 'Hello ' . serialize($this->_out);

现在我在浏览器端获取数据,例如:

Hello  a:5:{s:2:"id";i:-1;s:11:"fieldErrors";a:0:{}s:5:"error";s:0:"";s:4:"data";a:0:{}s:3:"row";a:11:{s:8:"DT_RowId";s:7:"row_135";s:2:"id";s:3:"135";s:9:"last_name";s:6:"sdfdsf";s:10:"first_name";s:3:"dsf";s:8:"homeaddr";s:21:"sdfdsfsdfdsfdsfdsfdsf";s:5:"email";s:8:"s@jj.com";s:10:"officeaddr";s:24:"wwwwwwwwwwwwwwwwwwwwwwww";s:6:"mobile";s:8:"11111111";s:3:"age";s:2:"11";s:9:"chargeamt";s:2:"11";s:10:"start_date";s:10:"11/11/2011";}}{"row":{"DT_RowId":"row_135","id":"135","last_name":"sdfdsf","first_name":"dsf","homeaddr":"sdfdsfsdfdsfdsfdsfdsf","email":"s@jj.com","officeaddr":"wwwwwwwwwwwwwwwwwwwwwwww","mobile":"11111111","age":"11","chargeamt":"11","start_date":"11'/11'/2011"}}

我需要从中提取值"id":"135"。

实际上,由于某些限制,我无法将成功函数用于我的操作。因为我正在解决一个问题,我正在为我遇到的问题编写代码

编辑:

我尝试打印如下值:

echo 'Hello ' . serialize($this->_out['row']['DT_RowId']);

我在控制台日志中得到以下输出:

Hello s:7:"row_140";{"row":{"DT_RowId":"row_140","id":"140","last_name":"sdfdsf","first_name":"dsf","homeaddr":"sdfdsfsdfdsfdsfdsfdsf","email":"s@jj.com","officeaddr":"wwwwwwwwwwwwwwwwwwwwwwww","mobile":"11111111","age":"11","chargeamt":"11","start_date":"11'/11'/2011"}}

我不确定输出的结构是什么 - 但我如何从上面提取"id":"140"。我只是猜测"row_140"不是一个常量名称,而是row_# 记录编号

编辑:

以下是echo print_r($this->_out)的输出;根据要求:

Array
(
    [id] => -1
    [fieldErrors] => Array
        (
        )
    [error] => 
    [data] => Array
        (
        )
    [row] => Array
        (
            [DT_RowId] => row_157
            [id] => 157
            [last_name] => sdfdsf
            [first_name] => dsf
            [homeaddr] => sdfdsfsdfdsfdsfdsfdsf
            [email] => s@jj.com
            [officeaddr] => wwwwwwwwwwwwwwwwwwwwwwww
            [mobile] => 11111111
            [age] => 11
            [chargeamt] => 11
            [start_date] => 11/11/2011
        )
)
1{"row":{"DT_RowId":"row_157","id":"157","last_name":"sdfdsf","first_name":"dsf","homeaddr":"sdfdsfsdfdsfdsfdsfdsf","email":"s@jj.com","officeaddr":"wwwwwwwwwwwwwwwwwwwwwwww","mobile":"11111111","age":"11","chargeamt":"11","start_date":"11'/11'/2011"}}

我不太确定我是否理解你的问题。但是session_start()应该在 php 脚本中页面的开头调用。也就是说,在打印任何东西之前。因为会话标头应该发送到浏览器。

当你预制ajax时,不要与PHP混淆。通过 ajax 将用户详细信息发送到 PHP 脚本。然后让 php 脚本返回用户 id 作为响应,然后你可以在 javascript 中使用它。您在浏览器上获得的页面实际上是 PHP 脚本的输出。我的意思是,您的 PHP 脚本中的所有 PHP 代码都将被执行,输出就是您在浏览器上获得的内容。因此,当您的页面被执行(从浏览器访问)时,javascript中的var uid = '';已经具有PHP脚本的结果。在那个 AJAX 调用之后,它不会更新!

对于数组错误,我相信您正在为$_SESSION['uid']分配一个数组.我认为如果您只是将值(即用户 id)存储为该会话中的 int 或字符串而不是数组会更好!

你不能像这样
从jquery访问php变量对于您的问题,有一个更简单的解决方案,只需echo $_SESSION['uid']您的 jquery 回调函数并使用 jquery 访问它

,就像这样

用户添加.php

if(!isset($_SESSION))
    session_start();
if(isset($_SESSION['uid']))
    echo $_SESSION['uid'];
    unset($_SESSION['uid']);

Jquery

    $.ajax({ 
        url  : "euseradd.php",
        cache: false,           
        success: function(responseText){ 
            alert(responseText); //this should contain your session uid
        }
    }); //end of ajax call
    return false;