取消设置具有相似名称的所有会话变量

Posted

技术标签:

【中文标题】取消设置具有相似名称的所有会话变量【英文标题】:Unset all session variables with similar name 【发布时间】:2016-05-07 02:13:13 【问题描述】:

我正在使用一些$_SESSION 变量来过滤许多具有相似名称的查询记录(例如$_SESSION['nameFilter']$_SESSION['cityFilter'] 等)。

我正在使用一个链接来重置这些过滤器,但我想知道是否有办法取消设置所有 $_SESSION 变量名称如下:

$_SESSION[(somewords)Filter]

【问题讨论】:

循环通过会话,你可以检查键是否包含过滤器,如果它没有设置它? 如果需要,您应该切换到多维数组:$_SESSION['filter']['name']$_SESSION['filter']['city'] 等。然后您只需取消设置父元素。 【参考方案1】:

使用foreach枚举$_SESSION[]中的the keys,使用substr()获取每个键的最后6个字符,使用unset()(还有什么?)取消设置。

简单到:

session_start();
foreach (array_keys($_SESSION) as $key) 
    if (substr($key, -6) == 'Filter') 
        unset($_SESSION[$key]);
    

【讨论】:

【参考方案2】:

假设您的密钥始终包含字符串Filter,您可以检查它。

我建议您查看strpos 函数,该函数检查给定的针是否在字符串中重合,并在未找到时返回null 或针在该字符串中开始的位置。

然后你只需要遍历会话变量并取消设置包含单词Filter的变量

foreach($_SESSION as $key => $value)
  if (strpos($key, 'Filter') !== false) 
    unset($_SESSION[$key]);
  

希望这会有所帮助:)

【讨论】:

【参考方案3】:

您需要检查每个存在的会话并检查它的名称。请检查下面的示例代码。

<?php
session_start();

//Example records...
$_SESSION['onefilter'] = 'one';
$_SESSION['twofilter'] = 'two';
$_SESSION['threefilter'] = 'three';
$_SESSION['fourtilter'] = 'four';

//Loop untill exist session...
foreach($_SESSION AS $sessKey => $sessValue)
    //Check for session name exist with 'filter' text...
    if (strpos($sessKey, 'filter') !== false) 
        unset($_SESSION[$sessKey]);//Unset session
    


echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>';
/*Output...

Array
(
    [fourtilter] => four
)
*/
?>

愿这对您有所帮助。

【讨论】:

【参考方案4】:

步骤:

1.) Get all session variable using $_SESSION.
2.) Check in every session key if it contain "Filter" string 
then unset it using unset($_SESSION[(someword)Filter]);

试试这个:

foreach($_SESSION as $key => $value)
  if (strstr($key, 'Filter') == 'Filter') 
    unset($_SESSION[$key]);
  

【讨论】:

以上是关于取消设置具有相似名称的所有会话变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C 中取消设置变量以允许稍后使用具有不同数据类型的相同名称?

问题删除会话变量

每当我重新加载页面时,仍会设置取消设置 PHP 会话变量 [重复]

会话变量的值正在取消设置,即“-blank-”没有取消设置它

取消设置 php 会话变量

如何在取消设置变量后修复会话未启动