任何人都可以告诉如何维护一个会话(在PHP中),以便会话包含被保留并且即使在浏览器重新启动后也可以访问。即使浏览器关闭后,是否可以保持会话?
一般而言,会话在浏览器关闭时过期,但我希望会话NOT TO BE CLOSED可以在下次浏览器使用时访问会话数据。
任何人都可以告诉如何维护一个会话(在PHP中),以便会话包含被保留并且即使在浏览器重新启动后也可以访问。即使浏览器关闭后,是否可以保持会话?
一般而言,会话在浏览器关闭时过期,但我希望会话NOT TO BE CLOSED可以在下次浏览器使用时访问会话数据。
使用session_set_cookie_parameters()
在开始会话之前给会话cookie一个非零的生命周期,或者将session.cookie_lifetime
设置为非零。在PHP
如果您使用Cookie而不是会话,则可以完成此操作。
会话使用cookies,所以... – 2010-09-10 12:37:38
那么,我的意思是使用setcookie而不是session_start – Mischa 2010-09-10 12:45:08
@remi会话也可以不使用cookie。 – 2010-09-10 12:56:32
会话(在大多数网络技术)的工作是这样的:
您存储会话ID在客户端计算机上的cookie。
当客户端来到您的网站时,他会向您发送会话ID。
服务器在具有会话ID的文件中查找会话数据并加载它。
因此关闭浏览器对会话没有影响,但是如果浏览器在关闭它时清空cookie(我认为任何浏览器都没有这样做)。
如果您确定用户始终登录,则可以将其用户名/密码存储在他的Cookie中,但这并不安全。
或者你可以将一个加密标记存储在cookie中。 – 2010-09-10 12:43:46
为什么它不安全?如果你安全而巧妙地使用cookies,这是绝对安全的。 – 2010-09-10 12:44:59
@hey:这是不安全的:我上你的电脑,我去cookies目录,我读了你的登录信息,我99%确定你在其他一些网站上使用这些信息。如果它是一台公共电脑,那就更有趣了。 @ignacio:的确可以创建自己的会话系统。 – 2010-09-10 13:07:18
它是矛盾的。
会话代表“直到浏览器关闭”。
会话是到期的事情。
如果你不希望它过期,你可能根本不需要一个会话。
您可能正在与cookie或数据库进行会话。
你可以这样做:(见session_set_cookie_parameters()
和session_name()
)
// long long time
$sessionTime = 365 * 24 * 60 * 60;
$sessionName = "my_session";
session_set_cookie_params($sessionTime);
session_name($sessionName);
session_start();
if (isset($_COOKIE[$sessionName])) {
setcookie($sessionName, $_COOKIE[$sessionName], time() + $sessionTime, "/");
}
对于$sessionTime
,也指this question
最简单,最好的,我已经发现的是,而不是仅仅在session_start我们应该在每个页面上输入这个会话
$expire = 365*24*3600; // We choose a one year duration
ini_set('session.gc_maxlifetime', $expire);
session_start(); //We start the session
setcookie(session_name(),session_id(),time()+$expire);
//Set a session cookies to the one year duration
停止会话数据并开始模式一定要持久的数据(像DB一样)? – Lloyd 2010-09-10 12:36:01
你如何记录会话 - 用cookie?您需要让该cookie在浏览器会话之后持续存在 - 对不起,我无法告诉您您需要为PHP做什么。如果您通过将ID添加到您的网址来使用无Cookie会话,我不确定您是否可以这样做,除非您可以强制用户返回到相同的URL。 – Rup 2010-09-10 12:37:58