2011-03-22 57 views
0

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

<?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调用期间更改的其他对象(书籍),我也不希望书对象“知道”关于用户对象(对于可重用性),我也不想打扰只要内部的任何信息发生变化就必须记住存储用户对象。

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

感谢

回答

0

当你用AJAX全新应用的设计是不去想AJAX的喜欢的东西特别的主要策略。这是由浏览器执行的常规请求。与通过手动输入网址并按下Enter键打开新页面的方式完全相同。

+0

感谢您的回复,虽然我不确定它与我的问题有什么关系。我主要关心的是将用户对象保存到__destruct中的会话是否正确。 – Roey 2011-03-22 03:37:34

+0

@Roey:如果它与你的问题无关 - 在你的问题中删除关于ajax的所有提及,因为它只是混淆了你原来的问题。 – zerkms 2011-03-22 03:42:56