Ajax应用程序中PHP会话用户的正确策略

时间:2011-03-22 03:17:15

标签: php ajax session

我正在编写一个Ajax / PHP Web应用程序。大多数ajax调用都使用访问存储在会话中的用户对象。

<?php

session_start();

function session_user()
{
  static $session_user = null;

  if (!isset($session_user))
  {
    if (isset($_SESSION['user']))
      $session_user = unserialize($_SESSION['user']);
    else
      $session_user = new User();
  }
  return $session_user;
}


class User {
    public $books_borrowed = array();

    public function __construct() 
    {
    }

  function __destruct()
  {
    // store the user object in the session upon destruction
    session_start();
    $_SESSION[ 'user' ] = serialize( $this );  
  }         

    function authorise($user_id, $password)
    {
    // if the user_id and password match, load books_borrowed from the DB
    ...
    }

  function deauthorise()
  {
    session_destroy();
  }

}


?>

Ajax调用访问用户对象,如下所示:

return session_user()->books_borrowed;

请注意,用户对象会在销毁时存储自己,据我所知,这是在ajax调用返回之前发生的。

每次销毁对象时我将用户对象存储到会话的原因是它包含在ajax调用期间可能会更改的其他对象(书籍),我也不希望书籍对象“知道”用户对象(用于可重用性)也不想忘记在用户对象中的任何信息发生变化时都要记住存储用户对象。

有人可以看到这个策略有什么问题吗?

由于

1 个答案:

答案 0 :(得分:0)

使用ajax为全新应用程序设计时的主要策略是不要认为的ajax就像特殊的东西一样。这是浏览器执行的常规请求。绝对相同,例如当您通过手动输入网址并按Enter键打开新页面时。