刷新时不保存PHP会话

时间:2014-10-12 01:12:40

标签: php mysql session

所以,我有一个PHP类,它有一个更新名为$_SESSION['location']的会话变量的方法。但问题是,每次调用方法时,它都找不到保存的会话变量,并告诉我它没有设置。它应该存储位置ID,并且该方法基于会话变量从MySQL数据库中提取下一个位置,然后存储新ID。但是SQL代码中应该包含变量的地方是空的。

我在页面开头有session_start()。我尝试过手动设置变量,但它也没有做任何事情。还试图从另一个PHP页面到达该变量,也没有运气。请帮忙。

我的代码的小样本:

class location {
@session_start();
function compass($dir) {
    $select  = $_SESSION['location'];

    if($dir == "north") {
        $currentlat = mysql_result(mysql_query("SELECT `lat` FROM `locationdb` WHERE id=".$select), 0, "lat");
        $currentlon = mysql_result(mysql_query("SELECT `lon` FROM `locationdb` WHERE id=".$select), 0, "lon");
        $sql = "[THE SQL CODE THAT GETS THE NEXT LOCATION]";
        $id = mysql_result(mysql_query($sql), 0, "id");

        $_SESSION['location'] = $id;

        $return['loc']        = $this->display_location($id);
        $return['lat']        = $this->display_lat($id);
        $return['long']       = $this->display_long($id);
        $return['id']      = $id;
    }

    return $return;
}
}

3 个答案:

答案 0 :(得分:0)

我已经测试了您的代码

**不要在此文件中使用session_start()。

对于简单测试,首先将其添加到指南针()函数中。

 $_SESSION['location'] .= 'World';

然后用这些代码创建一个php脚本。

<?php
   session_start();
   $_SESSION['location'] = 'Hello';
   include_once('*your name of class file*');
   $obj = new location(); 
   $obj -> compass('north');
   echo $_SESSION['location'];
?>

运行此脚本

如果输出是&#34; HelloWorld&#34;然后你的$ _SESSION [&#39;位置&#39;]正在运作。

答案 1 :(得分:0)

检查你的phpinfo(),看看是否定义了会话保存路径。如果没有,请定义用于存储会话的目录。在您的代码中:

session_save_path('/ DIRECTORY IN THE SERVER');

然后再试一次。

答案 2 :(得分:0)

这更接近您的方法应该是什么样子。有一些设置可以帮助减少运行该函数时抛出的错误。有了这个功能和其他建议,你应该能够删除你得到的错误。

class location
    {
        public  function compass($dir = '')
            {
                // Set the $select by $_SESSION or by your function
                $select =   (isset($_SESSION['location']))? $_SESSION['location']: $this->myFunctionToSetDefault();

                // I set $dir to empty so not to throw error
                if($dir == "north") {
                        $currentlat =   mysql_result(mysql_query("SELECT `lat` FROM `locationdb` WHERE id=".$select), 0, "lat");
                        $currentlon =   mysql_result(mysql_query("SELECT `lon` FROM `locationdb` WHERE id=".$select), 0, "lon");
                        $sql        =   "[THE SQL CODE THAT GETS THE NEXT LOCATION]";
                        $id         =   mysql_result(mysql_query($sql), 0, "id");

                        $_SESSION['location']   =   $id;
                        $return['loc']          =   $this->display_location($id);
                        $return['lat']          =   $this->display_lat($id);
                        $return['long']         =   $this->display_long($id);
                        $return['id']           =   $id;
                    }

                // This will return empty otherwise may throw error if $return is not set
                return (isset($return))? $return:'';
            }
    }