我正在建立一个网站,而我宁愿不把cookie放在人们的电脑上。将会话最大超时时间延长到一天或两天是不好的做法 - 或者更糟糕 - 更不安全?
session_regenerate_id();
$profileid = $userdata['userid'];
$profile = $userdata['username'];
//Set session
$_SESSION['profileid'] = $profileid;
//Put name in session
$_SESSION['profile'] = $profile;
$_SESSION['loggedin'] = true;
编辑:添加了代码。 编辑:我要修改的php.ini行是:
session.gc_maxlifetime = 1440
答案 0 :(得分:1)
我认为只要你的代码一般是安全的,就没有什么特别不安全的。
然而
a)如果用户关闭浏览器,用户将丢失他们的数据 - 他们可能会因任何原因这样做。如果您需要确保数据在会话之间保持更长时间,除非用户明确选择退出,否则请使用cookie。否则,坚持不使用cookie似乎有点适得其反。为了澄清,我认为我的意思是,如果标准会话生命周期不够长,那么你可能不应该使用$ _SESSION来存储数据。按照它的本质,$ _SESSION是短暂的,只能用于相当短暂的事情。
b)除非你真的需要额外的努力来阻止所有的cookie,否则无论如何都会使用cookie设置PHP Session ID,所以你真的在为用户提供任何好处吗?答案 1 :(得分:1)
session.gc_maxlifetime指定之后的秒数 数据将被视为“垃圾”并可能被清理干净。垃圾 会话开始时可能会收集(取决于 session.gc_probability and session.gc_divisor)。
此值(默认为1440秒或[24分钟])定义未使用的PHP会话保持活动的时间。
例如:用户登录,浏览您的应用程序或网站数小时,数天。没问题。只要他的点击之间的时间永远不会超过1440秒。这是一个超时值,
PHP的会话垃圾收集器以session.gc_probability除以session.gc_divisor定义的概率运行。默认情况下,这是1/100,这意味着以100的概率检查上述超时值。
因此,增加此值很可能不会对您的脚本产生太大影响,除非您希望用户不要点击您的网站。就像在登录用户观看长视频然后观看后发现自己已经注销的情况一样。如果是这种情况,也许您应该使用一些javascript每隔20分钟轮询服务器以保持会话打开。