从www.example.com得到的php.net,但我不确定这是每个人都如何破坏所有会话的?
// Unset all Sessions
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() -42000, '/');
}
session_destroy();
代码是否会销毁所有会话??这是最常见的方式吗?你们是怎么销毁php会话的
对了,顺便说一句,那个session_name()
是什么?所有会话名称?例如$_SESSION['var1']
、$_SESSION['var2']
、…?
我不需要使用unset($_SESSION['var1']);
任何更多的权利?session_destroy()
和unset($_SESSION[])
有什么区别?
9条答案
按热度按时间0aydgbwb1#
首先,您应该知道什么是会话:您可以将会话视为服务器端的数据容器,它与一个随机标识符(会话ID)相关联。该会话ID需要由客户端提供,以便服务器可以将与该会话ID(从而与该会话)相关联的数据加载到
$_SESSION
变量中。$_SESSION
变量中的所有内容也称为当前活动会话的 * 会话变量 *。现在回答你们的问题:
代码是否会销毁所有会话??这是最常见的方式吗?你们是怎么销毁php会话的?
提供的代码只删除当前会话的会话数据。
$_SESSION = array();
语句将简单地重置会话变量$_SESSION
,以便将来对会话变量$_SESSION
的访问将失败。但会话容器本身尚未删除。这将通过调用session_destroy
来完成。参见Truly destroying a PHP Session?
对了,顺便问一下,session_name()是什么??所有会话名称?例如$_SESSION ['var 1'],$_SESSION ['var 2']...?
session_name仅用于识别cookie、URL查询或POST参数中传递的会话ID参数。PHP的默认值是
PHPSESSID
。但是你可以把它改成任何你想要的。我不需要使用unset($_SESSION ['var 1']);更多的权利???
否。初始
$_SESSION = array();
删除所有会话数据。使用session_destroy和unset($_SESSION[])有什么区别??
session_destroy
将删除整个会话容器,而unset
或重置$_SESSION
变量将只删除当前运行时的会话数据。6ju8rftf2#
这只会销毁当前用户的会话,而不会销毁所有其他用户的会话。
尝试使用session_保存_path()查找会话数据的存储位置,然后删除那里的所有文件。
9rygscc13#
session_name()
是传入cookie / querystring的名称。通常为PHPSESSID,但可以更改。没有正确的方法来销毁所有会话。正如@Marius所说,您可以尝试从
session_save_path()
中删除会话文件,但这充其量是一种黑客行为。或者,您可以使用
session_set_save_handler()
将会话保存到您有更多控制权的地方,例如数据库。nhn9ugyo4#
要销毁单个会话,应使用以下命令:
假设你已经使用了session_start()来启动/恢复一个会话。
销毁所有会话实际上取决于您的设置以及您处理会话的方式。
对于大多数PHP安装,会话处理是通过文件完成的,所以最好的方法是找到保存所有会话的文件夹(通常从session_保存_path()中找到),并删除该文件夹下的所有文件。
不过,我认为,处理这个问题的最好方法可能是在您创建的每个会话中预先设置时间戳。这意味着您可以将该时间戳与一个设定点(您希望使所有会话无效的时间)进行比较,如果会话在该时间之前,则使其无效。这也意味着你可以做一些事情,比如为一个会话设置一个特定的超时,等等。
另一种方法可能是更改为使用数据库存储会话-您可以找到一个很好的教程here
5uzkadbs5#
我知道这是一个旧的线程...但我只是想分享:)
我发现,而不是使用临时文件夹的会议,你可以保存到一个数据库。因此,从技术上讲,会话管理是可能的。
我的密码:
(主要来自http://www.tonymarston.net/php-mysql/session-handler.html#session.handler):
mysql:
会话处理程序(我把它放在一个单独的文件php_session.class.php中):
对不起这里的代码太乱了。
使用
**重要提示:**在调用session_start()之前放置
然后调用session_start(),你就完成了!
由于它在mysql中,你可以通过用户id(使用$_SESSION自己设置)看到谁在线,并执行诸如注销之类的功能(这就是我使用它的目的)。
2exbekwf6#
您必须删除会话记录。
如果会话由DB处理-删除行。
如果会话由FILES处理-删除文件。
在这里你可以找到完整例子:
http://mdb-blog.blogspot.co.il/2015/05/php-destroydelete-all-sessions.html
1hdlvixo7#
如果你想避免警告:
注意:session_destroy():正在尝试销毁未初始化的会话... 18号线
不要忘记在代码的开头添加
session_start();
。除此之外,您提供的代码按预期工作。wlzqhblo8#
最简单的方法不是一次删除所有会话,而是记住您上次的登录和会话重置的时间戳。
它不会删除所有会话文件,但会阻止旧会话运行。而且您不必依赖于垃圾收集器。没有找到类似的答案,所以我不得不添加这个。祝你今天愉快
关于您的进一步问题:
你的代码只会破坏你的单个会话,这是最常见的方式。 checkout 。
session_name会给予你一个变量的名字,php用来交换cookie,大多数时候你不需要它。在你的例子中使用的代码是一个非常旧的,请不要使用这个。
如果使用session_destroy或session_unset,则不必通过unset来取消设置每个数组项。
unset($_SESSION)将不起作用。
kyvafyod9#
要从PHP中删除所有会话文件,可以使用以下函数: