【问题标题】:The Right Strategy for PHP Session User in Ajax ApplicationAjax 应用程序中 PHP 会话用户的正确策略
【发布时间】:2011-03-22 03:17:14
【问题描述】:

我正在编写一个 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 调用期间可能会更改的其他对象(书籍),我也不希望书籍对象“知道”用户对象(为了可重用性),我也不想在任何信息发生变化时记住存储用户对象。

有人能看出这个策略有什么问题吗?

谢谢

【问题讨论】:

    标签: php ajax session


    【解决方案1】:

    当您使用 ajax 为全新的应用程序设计时,主要策略是不要考虑 ajax 喜欢一些特别的东西。这是浏览器执行的常规请求。与手动输入 url 并回车打开新页面时完全一样。

    【讨论】:

    • 感谢您的回复,虽然我不确定这与我的问题有什么关系。我主要感兴趣的是在 __destruct 中将用户对象保存到会话中是否正确。
    • @Roey:如果它与您的问题无关 - 请删除您问题中所有关于 ajax 的提及,因为它只会混淆您的原始问题。
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2014-07-28
    • 2014-01-11
    • 1970-01-01
    • 2010-09-10
    • 2014-07-31
    相关资源
    最近更新 更多