运行脚本后,PHP会话正在被清除

时间:2012-12-31 06:27:34

标签: php session

当用户访问我网站上的某个页面时,下面的脚本会运行一次。这完全有效,但由于某种原因,在运行一次后,会话被清除并设置为“0”。

会话名称为“user_zip”,以下是以某种方式清除会话的代码。

$user_zip_query = "SELECT * FROM dev_cities WHERE city_zip = '".$_SESSION['user_zip']."'";
$user_zip = mysql_query($user_zip_query);
$userziprow = mysql_fetch_assoc($user_zip);
$state = $userziprow['city_state'];
$county = $userziprow['city_county'];
$city = $userziprow['city_name'];

知道可能导致这种情况的原因吗?

会话使用此代码在包含的类文件中启动...

 public function __construct() {

        include_once("includes/userconfig.php");                  // include database constants        

        if ($this->checkDatabase()) {                   // check for database connection

            session_start();                            // create session

2 个答案:

答案 0 :(得分:1)

你的代码在会话中有引号,它也被引号括起来,取消会话会改变它:

$uzip = $_SESSION['user_zip'];
//highly recommend use add SQL injecton prevention here how ever
$user_zip_query = mysql_query("SELECT * FROM dev_cities WHERE city_zip = '$uzip'") or die(mysql_error());

$row = mysql_fetch_assoc($user_zip_query);
$state = $row['city_state'];
$county = $row['city_county'];
$city = $row['city_name'];

答案 1 :(得分:1)

使用会话我们需要做的是

1开始会话

session_start()函数必须出现在标记之前:

2存储会话变量,如

$_SESSION['bla']=blabla;

3销毁会话

要删除部分会话数据,您可以使用unset()session_destroy()功能。

好读

  1. Session Handling
  2. PHP Security Guide: Sessions

  3. 注意

    1. 整个 ext/mysql PHP扩展程序(提供名为mysql_的所有函数)为officially deprecated as of PHP v5.5.0,将来会被删除。因此,请使用PDOMySQLi
    2. 好读

      1. The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead