php session_destroy()和session_unset()区别

 更新时间:2016年11月25日 15:07  点击:1576
本文章简单的介绍一下关于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--]

相关文章

  • mysql_connect与mysql_pconnect的区别详解

    在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍mysql_connect与mysql_pconnect的区别,有需要了解...2016-11-25
  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP分布式框架如何使用Memcache同步SESSION教程

    本教程主要讲解PHP项目如何用实现memcache分布式,配置使用memcache存储session数据,以及memcache的SESSION数据如何同步。 至于Memcache的安装配置,我们就不讲了,以前...2016-11-25
  • C#中out与ref的区别实例解析

    这篇文章主要介绍了C#中out与ref的区别实例解析,对C#初学者有不错的学习借鉴价值,需要的朋友可以参考下...2020-06-25
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • 谈谈Jquery中的children find 的区别有哪些

    精华:find方法能找子孙,children方法只能找儿子一、Jquery中children 语法.children(selector) 说明expr是表达式,可选参数,所有选择器中的表达式都可以用在这,比如按标签名"div",按类名".class",按序号":first"等等,如果表...2015-10-21
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • Python3使用Selenium获取session和token方法详解

    这篇文章主要介绍了Python3使用Selenium获取session和token方法详解,需要的朋友可以参考下...2021-02-17
  • 详解C#中的session用法

    这篇文章主要介绍了C#中的session用法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • PS中像素大小、文档大小的区别

    在PS中像素大小、文档大小有什么区别呢,这个估计很多初学者不清楚,下面我来给大家讲解一下,希望对你有帮助。 1、像素大小 通常用于显示屏显示的图片大小的调整。菜...2016-09-14
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • C#中sleep和wait的区别分析

    这篇文章主要介绍了C#中sleep和wait的区别分析,有助于深入理解C#中线程的原理与使用技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • 编程新手必须掌握的:session与cookie的区别

    session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章和资料的参阅,及作者个人的应用体会,对这两个概念做一个简单的阐述...2013-09-11