起初,我想出了下面来看看保持登录到我的网站的用户,如果用户已经登录:如何使用PHP会话cookie
<?php
session_start();
if(!isset($_SESSION['sessionid'])) {
header("Location: login_form.php");
} else {
echo "You are logged in";
}
?>
$_SESSION['sessionid']
当用户手动登录设置。
如果用户选中“记住我”我设置会话cookie的生命周期为10年:
$lifetime = 24*60*60*365*10; // 10 years
setcookie(session_name(),session_id(),time()+ $lifetime,'/');
所以现在我需要弄清楚如何在服务器端做....在当然,我正在考虑将session.gc_maxlifetime设置为很高的值,以便服务器的会话数据可以长时间存在,但是10年将会很荒谬。现在我想我应该将会话ID存储在用户表中,并根据会话ID查询该ID。如果有匹配,我会自动登录用户。
我的问题是: 如何从客户端获取会话ID?
我的理解是,在我调用session_start()之后它将可用,但仅在服务器的会话数据仍可用时才可用。如果会话已过期(这取决于session.gc_maxlifetime的值),则会在调用session_start()时生成新的会话标识。这会有问题,因为它不会匹配我存储在用户表中的最后一个会话ID。
所以想法我要读会话ID,呼吁在session_start()之后是: 1)$_SESSION['sessionid']
2)$id = session_id();
3)如果服务器已经摧毁$_COOKIE["PHPSESSID"];
1和2将无法正常工作会话数据,所以我不认为我可以使用这些。
3可能会奏效,但是当我试图(echo $_COOKIE["PHPSESSID"];
)我很惊讶,因为会话ID是出现了两次: 输出是这样的:
htknitopug4b6bv4ql9050pfg6 //htknitopug4b6bv4ql9050pfg6
我只是希望可以将输出为htknitopug4b6bv4ql9050pfg6.
任何人都可以解释会话ID的重复条目?如果这种行为是一致的,我总是可以将第一个字符串读入我的数据库表中。
我建议你给[这个答案](http:// stackoverflow。com/questions/5009685/encoding-cookies-so-they-can-be-spoofed-or-read -etc/5009903)#5009903)阅读。总之,你不应该那样做...... – ircmaxell 2011-02-16 19:24:34