会话变量未打印

时间:2015-01-13 06:30:42

标签: javascript php

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

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']

我收到错误&#39;注意:数组到字符串转换&#39; - 我的目的是记录某些日志中的值以查看值后端也分配的值。

修改

我通过以下方式修改了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"}}

我需要提取价值&#34; id&#34;:&#34; 135&#34;从它。

实际上由于某些约束,我无法对我的操作使用成功函数。因为我正在解决一个问题,我正在为我所拥有的问题编写代码

修改

我尝试打印如下的值:

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"}}

我不确定输出的结构是什么 - 但我如何从上面提取&#34; id&#34;:#34; 140&#34; 。我只是猜测&#34; row_140&#34;不是常量名称,而是row_#record number

修改

以下是 echo print_r($ this-&gt; _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"}}

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

<强> useradd.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;