会话修饰符

时间:2016-04-11 19:26:49

标签: php cookies

我使用以下代码:

session_set_cookie_params(-1,'/','myAwesomeDomain.com',true,true);

保护PHPSESSID Cookie。

问题是,我无法在其他任何地方更改Cookie的名称:

session_name('_uid');

我的问题是:如何让这两种方法相互协作? 此外,还有一种方法可以参考"当浏览会话结束时#34;在第一个方法的第一个参数?

PS:文件中有一个session_start():D

编辑:我甚至接受修改php.ini文件的方法。

EDIT v2:包含它的文件是彼此独立的,并且我需要执行多少行代码并不重要。使用include_once()

编辑v3:这太荒谬了。 PHP在域前放置一个点: sumPhpCookies
现在我完全失去了原因。 (我甚至不在这里使用session_name。)

编辑v4:代码:

<?php
// Somehow rename PHPSESSID cookie
session_set_cookie_params(-1,'/','www.forcemagic.xyz',true,true);
session_start(); ?>

2 个答案:

答案 0 :(得分:1)

session_name('_uid')

As the manual says,名称应仅包含字母数字字符(字母,数字),并且不允许仅包含数字,且必须至少包含一个字母。

因此,下划线实际上就是问题。

答案 1 :(得分:0)

session_name实际上必须在 session_set_cookie_params之前声明

http://php.net/manual/en/function.session-set-cookie-params.php 看到“brandan,bildumgsroman.org”的评论

浏览器是客户端。 (遗憾的是)没有办法发现某人是否关闭了他们的浏览器,因为它没有向服务器传达任何关于它的信息(这就是PHP所在的地方)。用户在指定的生命周期内未重新加载页面后,会话就会消失。 - JavaScript解决方案也非常不准确。 (相信我,我已经尝试过了)

但是,有一种方法可以确定浏览器是否已关闭。但是,我不推荐它;

您可以创建重复的ajax调用,该调用在数据库中存储具有特定会话的用户在线的简单时间戳。然后,您可以在PHP上运行cronjob,检查该数据库的keepalive时间戳,now和最后(2)ping之间的差异较大,然后cronjob将知道浏览已停止。