【发布时间】: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 调用期间可能会更改的其他对象(书籍),我也不希望书籍对象“知道”用户对象(为了可重用性),我也不想在任何信息发生变化时记住存储用户对象。
有人能看出这个策略有什么问题吗?
谢谢
【问题讨论】: