Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中关闭浏览器后保持会话打开?_Php_Mysql_Session_Cookies - Fatal编程技术网

如何在PHP中关闭浏览器后保持会话打开?

如何在PHP中关闭浏览器后保持会话打开?,php,mysql,session,cookies,Php,Mysql,Session,Cookies,我按照这里的答案做了,但对我来说不起作用: 以下是我尝试的代码: $session_life = 2592000; // 30 days session_set_cookie_params($session_life); session_name('my_cart'); session_start(); // update the session_life setcookie(session_name(),session_id(),time()+$session_life); 问题是每次关闭

我按照这里的答案做了,但对我来说不起作用:

以下是我尝试的代码:

$session_life = 2592000; // 30 days
session_set_cookie_params($session_life);
session_name('my_cart');
session_start();
// update the session_life
setcookie(session_name(),session_id(),time()+$session_life);
问题是每次关闭浏览器时,我都会得到一个新的会话id,而不是旧的。

我正在使用数据库将项目存储在“我的购物车”中,会话id仅用于标识用户,以便向他们显示自己的购物车

对于我来说,让用户购物车保持30天的活动状态的最佳方式是什么


这是我最后得到的代码:

$cart_name = "my_cart";
$cart_life = 2592000; // 30 days
session_start();
if (isset($_COOKIE[$cart_name])) {
    session_id($_COOKIE[$cart_name]);
}
setcookie($cart_name, session_id(), time()+$cart_life);

我曾经在我写的一个网站上做过类似的事情(给客户30分钟的时间输入代码)

我没有使用cookie(因为你不能保证客户会在同一个浏览器中返回该站点),而是根据用户记录存储代码的过期时间。这样,无论他们从哪个浏览器访问页面(例如,从手机开始,在桌面上结束),他们都会在同一时间过期

当客户返回站点时,我将当前时间与到期时间进行比较,并采取相应的行动

由于您已经在存储客户的购物篮,我会根据记录添加到期时间,然后在客户返回时运行比较。这很容易做到:

update basket set expiryDateTime=date_add(now(),interval 7 day) where basketID=[xyz]

如果您愿意,您甚至可以通过在MySQL中使用更多的技巧将一天的时间设置为标准值(20:00)

也许这是Cookie作业,而不是会话。您的会话也可能在服务器上过期。php参数定义了会话信息在垃圾收集之前保留的最长时间。谢谢,但这仅在客户登录时有效。我还想让客户无需注册即可将物品添加到购物篮中。除此之外,我已经在数据库中根据购物车记录保留了last_update字段。(我的意思是,我已经在为注册客户做这件事了)。在这种情况下,将篮子存储在一个cookie中(作为JSON字符串),并带有到期日期值。当它们返回时,检查cookie并使任何需要更新的项目过期。只需确保cookie中没有存储任何个人信息。如果他们需要注册才能真正进入结账/付款部分,则在他们成功注册后将信息传输到DB,并且仅在中使用DB(即,cookie表示未注册,DB表示已注册)。这将允许搜索订单历史记录。对不起,我认为您不理解我的意思。我已经将购物车存储在数据库中,对于注册客户,我将从数据库中找到他们拥有的购物车。我在这里所要做的就是,当浏览器关闭时,保留以前的会话id,以便未注册的客户可以从以前看到他们的购物车。因此,我在会话名称下创建了一个会话,并将其设置为在30天后过期,但在浏览器关闭时它似乎仍然会过期。我该怎么做才能解决这个问题?我只需要以前的会话id来标识已经存储在数据库中的购物车。thanksPut将会话ID放入cookie中,并在有人访问该站点时搜索。如果他们在不同的浏览器中返回,他们什么也得不到。将过期日期/时间放入数据库的优点是,您可以每小时/天运行一个作业,以过期/删除与注册用户无关的记录好的,现在您终于回答了我的问题!这就是我试图做的,但它不起作用。。。如何修复它?