首页 > 编程技术 > php

php session_destroy()和session_unset()区别

发布时间:2016-11-25 15:07

本文章简单的介绍一下关于session_destroy(),session_unset()区别说明,有需要的朋友可以参考一下。

session_unset()

You should know that on recent PHP only the first one of these functions works correctly. And if you use the other two, var_dump will print you the result you expected (session cleaned up), but the session file on the server won't be cleaned up. So use the first one.

 代码如下 复制代码

<?php

function session_clean1($logout=false)
 {
  $v=array();
  foreach($_SESSION as $x=>$y)
   if($x!="redirector"&&($x!="user"||$logout))
    $v[]=$x;

  foreach($v as $x)
   unset($_SESSION[$x]);
  return;
 }

function session_clean2($logout=false)
 {
  foreach($_SESSION as $x=>$y)
   if($x!="redirector"&&($x!="user"||$logout))
    unset($_SESSION[$x]);
  return;
 }

function session_clean3($logout=false)
 {
  $s=($logout||!isset($_SESSION["user"]))?array():
   array("user"=>$_SESSION["user"]);
  if(isset($_SESSION["redirector"]))
   $s["redirector"]=$_SESSION["redirector"];
  $_SESSION=$s;
 }

?>

On previous php (<<5.1.4) releases at least the third one worked correctly.

 

释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id

session_destroy()

删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留

因此,释放用户的session所有资源,需要顺序执行如下代码:

PHP代码

 代码如下 复制代码

<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();
?>

这里主要是介绍一个实用的php substr_count()函数,统计字符串中一个字符出现的次数,有需要的朋友可以参考。

substr_count(string,substring,start,length)

参数 描述
string 必需。规定要检查的字符串。
substring 必需。规定要检索的字符串。
start 可选。规定在字符串中何处开始搜索。
length 可选。规定搜索的长度。

 

 代码如下 复制代码

<?php

$str="ni hao ,wo jiao wang hui ,lai zi an hui chao hu";

echo "原字符串:".$str."<br />";

$str1=substr_count($str,'i');//substr_count():统计字符串在函数中出现的次数

echo "使用substr_count()之后:".$str1."<br />";

$str2=substr_count($str,'i',6);//substr_count($str,'i',6):从第6个字符串开始统计,后面还跟数字的话,就是统计多少个,如果不加的话,默认是到最后

echo "使用substr_count()之后:".$str2."<br />";

?>

数组在php中是和个数据类型,它是一个特殊的类型可以存放不同的数据,包括在php中可用的大部份,下面我们想办法把二维数组中的数据输出来。

二维数组访问
例1:

 代码如下 复制代码
//建立数组
$arr=array("key"=>array("key2"=>"value"));
//访问二维数组“key2”元素
echo $arr["key"]["key2"];
例2:
//建立数组
$arr=array(array("key2"=>"value"));
//访问二维数组“key2”元素
echo $arr[0]["key2"];

更多维数组以此类推
$arr["键值"]["键值"]["键值"]["键值"]["键值"]。。。。

实例:

 代码如下 复制代码
$myphonebook   =   array   (  
  array("abcd","1234"),  
  array("efgh","5678"),  
  array("ijkl","9012")  
  );  
  echo   $myphonebook[0][0];   //   abcd  
  echo   $myphonebook[0][1];   //   1234


利用循环读取二维数组

 

 代码如下 复制代码
while($row=$db->fetch_array($query)){
    $arr[] = array($row[id],$row[f_id],$row[name]);
    //$arr[] = array('id'=>$row[id],'f_id'=>$row[f_id],'name'=>$row[name]);
}

二维数组读取还有一个方法就是利用foreach()来操作,这里我就不说了,我以前有写过相关的文章有需要的可以搜索一下。

一个初学者写的一款php分页哦,共 20 条 上一页 下一页这种效果,有需要分页的朋友可以参考一下,
 代码如下 复制代码

<?php
  include("file.php");
  $pagesize=5;
  $url=$_SERVER[REQUEST_URI];
  $url=parse_url($url);
  $url=$url[path];


  $a=mysql_query("select * from message");
  $b=mysql_num_rows($a);
   if($_GET[page]){
       $pagevel=$_GET[page];
       $page=($pagevel-1)*pagesize;
       $page.=',';
   }else{
       $page=1;   //这里加个未获取到值的处理
   }

   if($b>$pagesize){
       if($pagevel<=1) $pagevel=1;
       echo "共 $b 条 <a herf=$url?page="($pagevel-1)">上一页</a>" .
               " <a herf=$url?page="($pagevel+1)">下一页</a>";

   }
   $sql="select * from message limit $page ,$pagesize ";
   $query=mysql_query($sql);
   while($row=mysql_fetch_array($query)){
   echo "<hr><br>"."$row[title]"."$row[context]";

  }

?>

大多数的 JavaScript 框架如 jquery,Mootools 等,在发出 Ajax 请求时,都会发送额外的 HTTP_X_REQUESTED_WITH 头部信息,头当他们一个ajax请求,因此你可以在服务器端侦测到 Ajax 请求

1,   通过传递_GET参数的方法简单实现网页请求的判断。

url上这么传递:*******.php?ajax

php这么判断:

if(isset($_GET['ajax'])) {

...这是一个ajax请求,然后...

}

else {

...这不是一个ajax请求,然后...

}

这种实现方法很差劲,相当容易容易容易伪造。判断和不判断么有任何区别。
所以又出来一种自认为很科学的处理方式,这种方式确实有一定的学习价值。


Php获取系统变量中的xmlHttpRequest判读。

首先你必须使用jquery,Js发送ajax请求,通过jquery发送的$.ajax, $.get, or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,这个参数的值是xmlHttpRequest。

Js 代码:

 代码如下 复制代码

beforeSend : function (XMLHttpRequest) {

    XMLHttpRequest.setRequestHeader("X-Requested-With","XMLHttpRequest");

};

参数名X-Requested-With,参数值XMLHttpRequest,你可以任意定义。Php取得时候要在参数名前面加上大写的http字样

 

 代码如下 复制代码

if(!emptyempty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
//If AJAX Request Then
}else{
//something else
}

1,  如果

你的jquery请求是通过iframe打开网页的,那么HTTP_X_REQUESTED_WITH参数不会被传递,也就是说你没有办法判断请求的类型。

2,  IE5,IE6老版本的浏览器总中$.ajax, $.get, or $.post方法不会自动发送HTTP_X_REQUESTED_WITH的参数到头部信息,因为php中也是无法获取参数进行判断。除非你自己构造XMLHttpRequest对象出来,然后再发送给php脚本,相当于用最原始的js实现ajax功能。这样做,jquery框架本来封装好的ajax就失去意义啦

标签:[!--infotagslink--]

您可能感兴趣的文章: