gpt4 book ai didi

php - 这是重建给定用户 session 的正确方法吗?

转载 作者:行者123 更新时间:2023-11-29 00:51:55 25 4
gpt4 key购买 nike

我有如下功能:

 $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,其中包含他们当前 session 的 ID。这个 id 也被添加到数据库表中。我的理解是, session 最终会在客户端和服务器上过期,但可以将 cookie 和数据库条目设置为我想要的持续时间。

validateSessionId 检查数据库中的 session ID 表。如果找到 session ,并且上次访问时间不超过 30 天(如果是,则从表中删除),则用户列表中的关联数组表示与该 session ID 关联的用户。该用户的数据随后会加载到当前 session 中。

我是否正确理解了它的工作原理?

最佳答案

可以避免整个session_id() 业务。当您调用 session_start() 时,PHP 将自动检查 session cookie 的存在,并在那时检索 session 的 ID。您只是在重复已经为您完成的工作。

您的代码假定 PHP 发送以跟踪 session 的 cookie 实际上是一个永久性 cookie。通常 PHP 只发送一个 session cookie(例如,当浏览器关闭时删除)。因此,用户在返回网站时不会有任何 session cookie,并且每次都会获得一个全新的 session 。

关于php - 这是重建给定用户 session 的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8159254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com