【发布时间】:2011-12-30 20:23:23
【问题描述】:
我的功能如下:
$sid = mysql_real_escape_string( $_COOKIE['session_id'] );
if( $sid ) { session_id( $sid ); }
// Start session
if( !session_start() ) { die( 'Session could not be started.' ); }
$sid = session_id();
// Validate session id
$user = $this->validateSessionId( $sid );
if( $user ) {
if( !$user['uid'] ) {
trigger_error( '`Services->__construct()` - Could not find user by session id \''.(string)$sid.'\'.',
E_USER_ERROR );
}
$_SESSION['uid'] = $user['uid'];
$_SESSION['user_name'] = $user['name'];
$_SESSION['user_email'] = $user['email'];
$_SESSION['user_created'] = $user['created'];
}
// If no valid session id, user is anonymous
else {
$_SESSION['user_name'] = 'Anonymous';
$_SESSION['user_created'] = time();
}
当用户首次登录时,系统会为他们创建一个名为 session_id 的 cookie,其中包含他们当前会话的 ID。此 id 也被添加到数据库表中。我的理解是会话最终在客户端和服务器上都会过期,但是可以将 cookie 和数据库条目设置为持续多久。
validateSessionId 检查数据库中的会话 ID 表。如果找到会话,并且上次访问时间超过 30 天(如果是,则从表中删除),用户列表中的关联数组表示与该会话 ID 关联的用户。然后将该用户的数据加载到当前会话中。
我是否正确理解了它的工作原理?
【问题讨论】:
标签: php mysql session session-cookies