2010-09-10 138 views
13

任何人都可以告诉如何维护一个会话(在PHP中),以便会话包含被保留并且即使在浏览器重新启动后也可以访问。即使浏览器关闭后,是否可以保持会话?

一般而言,会话在浏览器关闭时过期,但我希望会话NOT TO BE CLOSED可以在下次浏览器使用时访问会话数据。

+0

停止会话数据并开始模式一定要持久的数据(像DB一样)? – Lloyd 2010-09-10 12:36:01

+0

你如何记录会话 - 用cookie?您需要让该cookie在浏览器会话之后持续存在 - 对不起,我无法告诉您您需要为PHP做什么。如果您通过将ID添加到您的网址来使用无Cookie会话,我不确定您是否可以这样做,除非您可以强制用户返回到相同的URL。 – Rup 2010-09-10 12:37:58

回答

-1

如果您使用Cookie而不是会话,则可以完成此操作。

+1

会话使用cookies,所以... – 2010-09-10 12:37:38

+0

那么,我的意思是使用setcookie而不是session_start – Mischa 2010-09-10 12:45:08

+0

@remi会话也可以不使用cookie。 – 2010-09-10 12:56:32

5

会话(在大多数网络技术)的工作是这样的:

您存储会话ID在客户端计算机上的cookie。

当客户端来到您的网站时,他会向您发送会话ID。

服务器在具有会话ID的文件中查找会话数据并加载它。

因此关闭浏览器对会话没有影响,但是如果浏览器在关闭它时清空cookie(我认为任何浏览器都没有这样做)。

如果您确定用户始终登录,则可以将其用户名/密码存储在他的Cookie中,但这并不安全。

+0

或者你可以将一个加密标记存储在cookie中。 – 2010-09-10 12:43:46

+0

为什么它不安全?如果你安全而巧妙地使用cookies,这是绝对安全的。 – 2010-09-10 12:44:59

+0

@hey:这是不安全的:我上你的电脑,我去cookies目录,我读了你的登录信息,我99%确定你在其他一些网站上使用这些信息。如果它是一台公共电脑,那就更有趣了。 @ignacio:的确可以创建自己的会话系统。 – 2010-09-10 13:07:18

8

它是矛盾的。
会话代表“直到浏览器关闭”。
会话是到期的事情。
如果你不希望它过期,你可能根本不需要一个会话。

您可能正在与cookie或数据库进行会话。

+8

会话使用cookie,浏览器关闭时删除,_unless_他们有一个特定的一生。 – jwueller 2010-09-10 12:45:04

+0

@elusive 1. cookie不是唯一负责会话生命周期的事情。 2.我在谈论术语“会话”,而不是具体的PHP机制。但PHP会话思想当然遵循这个定义。你可以无视这种行为,但你只会宠坏自己。 – 2010-09-10 12:50:46

+1

如果浏览器会话过期,Cookie被称为*会话cookie *。浏览器关闭时就是这种情况。但是这样的会话cookie不需要包含会话ID。 – Gumbo 2010-09-10 14:10:09

0

你可以这样做:(见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

2

最简单,最好的,我已经发现的是,而不是仅仅在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 
相关问题