php中的变量引用传值学习笔记

 更新时间:2016年11月25日 14:59  点击:2435
引用:意思是将原始对象在内存中的地址传递给目标对象,就相当于原始对象和目标对象指向的是同一个内存地址。此时,如果对目标对象或者原始对象进行修改,内存中的数据也会改变。

所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy;系统将为目标对象重新开辟一个完全相同的内存空间。

所谓引用,就是说将对象在内存中的地址传递给目标对象,就相当于使目标对象和原始对象对应同一个内存存储空间。此时,如果对目标对象进行修改,内存中的数据也会改变。

传值的话,如果是非对象,会传一个值的拷贝,对这个变量做任何改动都不影响原值。传引用或者传对象,是传真实的内存地址,对这个变量做的改动会影响原值。

 代码如下 复制代码

 

function func1($a)

{ $a = $a + 1; }

 function func2(&$a)

{ $a = $a + 1; }

$sample = 1;

func1($sample);

echo $sample; // 输出 1

$sample = 1;

func2($sample);

9.echo $sample; // 输出 2

总结

在高中时老师告诉我们引用就是把内存地址给变量这样只要内存地址中发生变化而我们所财会的变量内容也会跟着变了,这个就有点像一个房子放了东西,我们都可以进入拿,只要东西变了我们进去看到的东西是一样的,而不是我把东西拿在手上,这样房里东西变了我这里不变了。

变量作用域就是一个变量在页面与函数之间可不可以相互使用,它的作用范围在哪里,下面小编来给大家介绍php变量使用域的一些学习笔记拿出来与大家交流一下。

在php当中变量的作用范围php手册上是这样描述的

在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如:

 代码如下 复制代码

<?php
$a = 1; /* global scope */

function Test()
{
   echo $a; /* reference to local scope variable */
}

Test();
?>

这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。你可能注意到 PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖,上面开个头,下面我来来详细介绍


在PHP中变量主要有:内置超级全局变量,一般的变量,常量,全局变量,静态变量等.

■内置超级全局变量可以在脚本的任何地方使用和可见。即如果我们在一个PHP页面中改变了其中的一个值,那么在其他PHP页面中使用时,它的值也会发生改变。
■常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面中就不能使用了。
■在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部,在函数内部的变量如果与全局变量名称相同,以函数内部的变量为准。
■函数内部使用的变量声明为全局变量时,其名称要与全局变量的名称一致,在这样的情况下,我们就可以在函数中使用函数外部的全局变量了,这样就可以避免上一种因为函数内部的变量与外部的全局变量名称相同而覆盖了外部变量这样的情况。
■在函数内部创建并声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值,最常见的情况就是在函数的递归执行的过程之中。
■在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。
超级全局变量的完整列表如下:

■.$GOBALS 所有全局变量数组
■.$_SERVER 服务器环境变量数组
■.$_POST 通过POST方法传递给该脚本的变量数组
■.$_GET 通过GET方法传递给该脚本的变量数组
■.$_COOKIE cookie变量数组
■.$_FILES 与文件上传相关的变量数组
■.$ENV 环境变量数组
■.$_REQUEST 所有用户输入的变量数组包括$_GET $_POST $_COOKIE 所包含的输入内容
■.$_SESSION 会话变量数组


1、局部变量

在函数中声明的变量认为是局部变量,即它只能在该函数中引用。如果在函数外复制,讲被认为是完全不同的另一个变量(即不同于函数中所包含的那个变量)。注意,退出声明变量的函数时,变量及其相应的值就会撤销。

 代码如下 复制代码

$x=4;

function assignx(){

$x=0;

printf("$x inside function is %d <br/>",$x);

}

assignx();

printf("$x outside of function is %d <br/>",$x);

 
执行结果为

$ inside function is 0

$ outside of function is 4

2、函数参数

PHP和其他编程语言一样,任何接受参数的函数都必须在函数首部中声明这些参数。虽然这些参数(值参数)接受函数外部的值,但退出函数后就无法再访问这些参数。

 

 代码如下 复制代码

function x10($value){
$value=

$value=$value*10

return $value;

}

记住,虽然在声明参数的函数内部可以访问和出力这些函数参数,但当函数执行结束时,参数就会撤销。

3、全局变量

全局变量可以在程序的任何地方访问。但是,为了修改一个全局变量,必须要修改该变量的函数中将其显式地声明为全局变量。只要在变量前面加上关键字GLOBAL,就是全局变量。如果将GLOBA关键字放在一个已有的变量前面,则是告诉PHP姚使用同名的变量。


使用 $GLOBALS 替代 global

 代码如下 复制代码

 

<?php
$a = 1;
$b = 2;
function Sum()
{
   $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum();
echo $b;
?>


在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。以下范例显示了超全局变量的用处:
例子 12-3. 演示超全局变量和作用域的例子

 代码如下 复制代码

 

<?php
function test_global()
{
   // 大多数的预定义变量并不 "super",它们需要用 'global' 关键字来使它们在函数的本地区域中有效。
   global $HTTP_POST_VARS;
   print $HTTP_POST_VARS['name'];
   // Superglobals 在任何范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。
   print $_POST['name'];
}
?>


使用静态变量

变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。看看下面的例子:
例子 12-4. 演示需要静态变量的例子

 代码如下 复制代码

 

<?php
function Test ()
{
   $a = 0;
   echo $a;
   $a++;
}
?>


本函数没什么用处,因为每次调用时都会将 $a 的值设为 0 并输出 "0"。将变量加一的 $a++ 没有作用,因为一旦退出本函数则变量 $a 就不存在了。要写一个不会丢失本次计数值的计数函数,要将变量 $a 定义为静态的:
例子 12-5. 使用静态变量的例子

 

<?php
function Test()
{
   static $a = 0;
   echo $a;
   $a++;
}
?>

 


现在,每次调用 Test() 函数都会输出 $a 的值并加一。
静态变量也提供了一种处理递归函数的方法。递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来中止递归。一下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止:
例子 12-6. 静态变量与递归函数

 代码如下 复制代码

 

<?php
function Test()
{
   static $count = 0;
   $count++;
   echo $count;
   if ($count < 10) {
   Test ();
   }
   $count--;
}
?>


注: 静态变量可以按照上面的例子声明。如果在声明中用表达式的结果对其赋值会导致解析错误。
例子 12-7. 声明静态变量

 代码如下 复制代码

 

<?php
function foo(){
   static $int = 0; // correct
   static $int = 1+2; // wrong (as it is an expression)
   static $int = sqrt(121); // wrong (as it is an expression too)
   $int++;
   echo $int;
}
?>

注意有朋友问我全局静态变量 ,在php中没有全局变量这一说活

php是一种解释型的语言,虽然有static修饰符,但意思与.Net中的完全不一样。
即使把类中的一个变量声明为static,这个变量也只在当前页面级的应用程序域中有效。

2、理解变量作用域。

  在方法体外声明的变量,在方法体内是访问不到的。
 如:

 代码如下 复制代码

 

<?php  
  $url = "www.111cn.net";  
  function _DisplayUrl()  
  {  
      echo $url;  
  }  
  function DisplayUrl()  
  {  
    global $url;  
    echo $url;  
  }  
  _DisplayUrl();  
  DisplayUrl();  
?> 

<?php
  $url = "www.111cn.net";
  function _DisplayUrl()
  {
      echo $url;
  }
  function DisplayUrl()
  {
    global $url;
    echo $url;
  }
  _DisplayUrl();
  DisplayUrl();
?>

_DisplayUrl方法是不会显示任何结果,因为变量$url在方法体_DisplayUrl中是无法访问的,在$url前加上global即可,如DisplayUrl方法。

在方法体中定义的global变量可以在方法体外访问:

 代码如下 复制代码


<?php  
  function _DisplayUrl()  
  {  
      global $myName;  
      $myName='yibin';  
  }  
    
  _DisplayUrl();  
  echo $myName;  //output yibin  
?> 

本文章来给各位同学介绍php控制页面浏览器缓存与启用gzip传送页面方法,希望此代码对各位同这会有所帮助,同时没有服务器权限的朋友可这样来实现服务器gzip页面传输。

php实例gzip传输页面

 代码如下 复制代码

可以用于静态资源与html页面,修改一下也适合于其他语言

//缓存过期时间(Cache-Control, http1.1协义), 推荐使用
$secs = 0; //秒
header("Cache-Control: s-maxage=$secs, max-age=$secs, must-revalidate, proxy-revalidate");

// 缓存过期时间为24小时(Expires)
$offset = 3600 * 24;
$expire = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
Header($expire); 

//Last-Modified, 最后修改的时间
$gmt_mtime = gmdate('D, d M Y H:i:s', time() ) . ' GMT';
header("Last-Modified: " . $gmt_mtime );   

//启用gzip压缩
ob_start();
    ... your php code ...
    ... your php code ...
    ... your php code ...
    header('Content-Length: ' . ob_get_length());
ob_end_flush();   

如果你有服务器权限可参考apache开启gzip传输


一,找到你的httpd.conf文件,打开找到如下

LoadModule deflate_module modules/mod_deflate.so

把前面的#去了,因为mod_deflate.so模块默认是关闭的,好了下面一下

二,把现面代码放到你httpd.conf文件最后面就好了。

 代码如下 复制代码

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
DeflateCompressionLevel 5
AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript
</IfModule>

重启你的apache就KO了

iis开启gzip页面传输

1. 打开Internet信息服务(IIS)管理器,右击“网站”-》“属性”,选择“服务”。在“HTTP压缩”框中选中“压缩应用程序文件”和“压缩静态文件”,按需要设置“临时目录”和“临时目录的最大限制”;

2. 在Internet信息服务(IIS)管理器,右击“Web服务扩展”-》“增加一个新的Web服务扩展。。.”,在“新建Web服务扩展”框中输入扩展名“HTTP Compression”,添加“要求的文件”为C:WINDOWSsystem32inetsrvgzip.dll,其中Windows系统目录根据您的安装可能有所不同,选中“设置扩展状态为允许”;

3. 使用文本编辑器打开C:WindowsSystem32inetsrvMetaBase.xml(建议先备份),

找到Location =“/LM/W3SVC/Filters/Compression/gzip用于设置gzip压缩,

找到Location =”/LM/W3SVC/Filters/Compression/deflate“用于设置deflate压缩。 上面两个节点紧挨着。并且设置的属性相同。

如果需要压缩动态文件,则将HcDoDynamicCompression设置为”TRUE“,

并在HcScriptFileExtensions中增加您要压缩的动态文件后缀名,如aspx;

如果需要压缩静态文件,则将HcDoStaticCompression和HcDoOnDemandCompression设置为”TRUE“,

并在HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css等;

HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数值在0-10, 默认为0。

HcDynamicCompressionLevel属性说明:HcDynamicCompressionLevel Metabase Property

HcOnDemandCompLevel 属性说明:HcOnDemandCompLevel Metabase Property

说明: 这两个属性值一般推荐设置为9, 具有最佳性价比。

注意

1. 在编辑MetaBase.xml前需要停止IIS,可以使用 net stop iisadmin

2. 修改完成后开启iisadmin服务,并执行iisreset命令

关于SEO的测试

压缩是否对SEO有影响,经测试,开启后仍然可以被很好的收录。

关于对SEO影响的研究文章,还可以参考下面的几篇文章。

具体的效率问题,将继续监控以作研究

在php中数组是一种特殊的数据类型,同时php也给我们提供了大量的数组操作函数,从而让我们在对数组操作时感觉无压力啊,下面我总结了php array数组入门笔记分享给各位。

简介:本次介绍的是PHP手册中用来对数组进行各种操作的系统函数,可以说数组在PHP中有重要的作用,因此函数也是灰常多,下面天涯把最常用的进行详细说明。

array_change_key_case — 返回字符串键名全为小写或大写的数组

    array array_change_key_case ( array $input [, int $case ] )

$case 可为 CASE_UPPER 或 CASE_LOWER(默认)

   

 代码如下 复制代码
<?php
    $phpha = array('Home'=>'http://www.111cn.net', 'Blog'=>'http://www.111cn.net');
    $phpha_upper = array_change_key_case($phpha, CASE_UPPER);
    $phpha_lower = array_change_key_case($phpha, CASE_LOWER); //默认情况
    print_r($phpha_upper);
    print_r($phpha_lower);
    ?>
    //结果:
    Array
    (
    [HOME] => http://www.111cn.net
    [BLOG] => http://www.111cn.net
    )
    Array
    (
    [home] => http://www.111cn.net
    [blog] => http://www.111cn.net
    )

array_chunk — 将一个数组分割成多个

    array array_chunk ( array $input , int $size [, bool $preserve_keys ] )

array_chunk() 将一个数组分割成多个数组,其中每个数组的单元数目由 size 决定。最后一个数组的单元数目可能会少几个。得到的数组是一个多维数组中的单元,其索引从零开始。
将可选参数 preserve_keys 设为 TRUE,可以使 PHP 保留输入数组中原来的键名。如果你指定了 FALSE,那每个结果数组将用从零开始的新数字索引。默认值是 FALSE。

   

 代码如下 复制代码
<?php
    $input_array = array('a', 'b', 'c', 'd', 'e');
    print_r(array_chunk($input_array, 2));
    print_r(array_chunk($input_array, 2, TRUE));
    ?>
    //结果:
    Array
    (
    [0] => Array
    (
    [0] => a
    [1] => b
    )
    
    [1] => Array
    (
    [0] => c
    [1] => d
    )
    
    [2] => Array
    (
    [0] => e
    )
    
    )
    Array
    (
    [0] => Array
    (
    [0] => a
    [1] => b
    )
    
    [1] => Array
    (
    [2] => c
    [3] => d
    )
    
    [2] => Array
    (
    [4] => e
    )
    
    )

array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值

    array array_combine ( array $keys , array $values )

返回一个 array,用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值。
如果两个数组的单元数不同或者数组为空时返回 FALSE。

 代码如下 复制代码
    <?php
    $key = array('Home', 'Blog');
    $key2 = array('Home', 'Blog', 'BBS');
    $phpha = array('http://www.111cn.net', 'http://www.111cn.net');
    $phpha_combine = array_combine($key, $phpha);
    $phpha_combine_wrong = array_combine($key2, $phpha);
    print_r($phpha_combine);
    print_r($phpha_combine_wrong);
    ?>
    //结果:
    Array
    (
    [Home] => http://www.111cn.net
    [Blog] => http://www.111cn.net
    )
   

// 可以看到第二次array_combine()报错了,指出了2个数组的成员数量不相等
    Warning: Both parameters should have an equal number of elements in F:Program FilesPHPNOWhtdocsindex.php on line 31

array_count_values — 统计数组中所有的值出现的次数

    array array_count_values ( array $input )

array_count_values() 返回一个数组,该数组用 input 数组中的值作为键名,该值在 input 数组中出现的次数作为值。

  

 代码如下 复制代码
  <?php
    $phpha = array('hello', 'world', 'tianya', 'hello', 'world');
    $phpha_result = array_count_values($phpha);
    print_r($phpha_result);
    ?>
    //结果:
    Array
    (
    [hello] => 2
    [world] => 2
    [tianya] => 1
    )

array_diff — 计算数组的差集
array_diff_key — 使用键名比较计算数组的差集
array_diff_ukey — 用回调函数对键名比较计算数组的差集
array_diff_assoc — 带索引检查计算数组的差集
array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集

  

 代码如下 复制代码
  //array_diff() 返回一个数组,该数组包括了所有在array1中
    //但是不在任何其它参数数组中的值。注意键名保留不变。
    <?php
    $array1 = array("a" => "green", "red", "blue", "red");
    $array2 = array("b" => "green", "yellow", "red");
    $result = array_diff($array1, $array2);
    print_r($result);
    ?>
    //结果:
    Array
    (
    [1] => blue
    )
    //本函数和array_diff()相同只除了比较是根据键名而不是值来进行的。
    <?php
    $array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
    $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
    print_r(array_diff_key($array1, $array2));
    ?>
    //结果:
    Array
    (
    [red] => 2
    [purple] => 4
    )
    //注意和 array_diff() 不同的是键名也用于比较。
    <?php
    $array1 = array ("a" => "green", "b" => "brown", "c" => "blue", "red");
    $array2 = array ("a" => "green", "yellow", "red");
    print_r(array_diff_assoc($array1, $array2));
    ?>
    //结果:
    Array
    (
    [b] => brown
    [c] => blue
    [0] => red
    )

array_fill — 用给定的值填充数组
array_fill_keys — Fill an array with values, specifying keys

array_filter — 用回调函数过滤数组中的单元

 代码如下 复制代码

    <?php
    function func_check($i){
    return $i > 3 ? TRUE : FALSE;
    }
    $array1 = array(2, 3, 5, 6);
    $array2 = array(NULL, '', 'hello');
    $array3 = array_filter($array1, 'func_check');
    $array4 = array_filter($array2);
    //函数func_check()用来判断给定的值,返回TRUE或FALSE
    //返回TRUE,则$array1中的值则会返回且键名不变,否则被过滤掉
    print_r($array3);
    //如果没有指定回调函数,则默认过滤掉array2中为等值为FALSE的成员
    //进行类型转换。因此本函数常用量顾虑掉数组中的空成员。
    print_r($array4);
    ?>
    //结果:
    Array
    (
    [2] => 5
    [3] => 6
    )
    Array
    (
    [2] => hello
    )

array_flip — 交换数组中的键和值

 

 代码如下 复制代码
   //如果同一个值出现了多次,则最后一个键名将作为它的值,所有其它的都丢失了。
    <?php
    $trans = array("a" => 1, "b" => 1, "c" => 2);
    $trans = array_flip($trans);
    print_r($trans);
    ?>
    //结果:
    Array
    (
    [1] => b
    [2] => c
    )

array_intersect — 计算数组的交集
array_intersect_assoc — 带索引检查计算数组的交集
array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引
array_intersect_key — 使用键名比较计算数组的交集
array_intersect_ukey — 用回调函数比较键名来计算数组的交集

  

 代码如下 复制代码
  <?php
    $array1 = array("a" => "green", "red", "blue");
    $array2 = array("b" => "green", "yellow", "red");
    $result = array_intersect($array1, $array2);
    print_r($result);
    ?>
    //结果:
    Array
    (
    [a] => green
    [0] => red
    )
    //注意array_intersect_assoc()和array_intersect()不同的是键名也用于比较。
    <?php
    $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
    $array2 = array("a" => "green", "yellow", "red");
    $result = array_intersect_assoc($array1, $array2);
    print_r($result);
    ?>
    //结果:
    Array
    (
    [a] => green
    )

在php中session是一个服务器全局变量可以实现页面之间传递了,所以session常用于服务器端用户会员登录验证,session的安全性也是非常高的,下面我来介绍一下关于php session基础知识。

大家对session有什么看法?不知道大家有没有研究过,今天达内php培训老师想要为大家分享一些有关这方面的内容,希望大家能够喜欢。
 
session 的生命周期是多长

1 浏览器结束时其生命周期也同时结束,但是档案仍然存在于 /tmp/(sess_???)
 
2 下次重新开浏览器时会重新分配 sessionID,如果你使用 session_id() 把以前的 ID 带回来,则会去读取残存在 /tmp 处的 sess_???, 取回你之前所有已经设定的参数
 
3 可以在 PHP.ini 里修改 session 档案残存的时间
 
 session.gc_maxlifetime = 1440 ; after this number of seconds, stored
 data will be seen as 'garbage' and
 cleaned up by the gc process
  默认是 1440 秒,24分钟
 
使用 session 注意的存储路径问题
 
看看 php.ini 里对于 session 的设置
 
 [Session]
 session.save_handler = files ; handler used to store/retrieve data
 session.save_path = /tmp ; argument passed to save_handler
 in the case of files, this is the
 path where data files are stored

默认是存于 /tmp 目录下,这个目录可不一定真有啊!!! 最好改为你的 php 安装路径,比如 c:/php


彻底理解PHP的SESSION机制 1.session.save_handler = files

    * 1. session_start()
         1. session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,
PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.ini的配置决定的,
但是有的系统是 session.gc_probability = 0,这也就是说概率是0,而是通过cron脚本来实现垃圾回收。

            session.gc_probability = 1
            session.gc_divisor = 1000
            session.gc_maxlifetime = 1440//过期时间 默认24分钟
            //概率是 session.gc_probability/session.gc_divisor 结果 1/1000,
            //不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。
            session.save_path = //好像不同的系统默认不一样,有一种设置是 "N;/path"
            //这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本

         2. session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,
这个值可以从php.ini找到

            session.name = PHPSESSID //默认值PHPSESSID
            

         3. 如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端.
相当于执行了下面COOKIE 操作,注意的是,这一步执行了setcookie()操作,COOKIE是在header头中发送的,
这之前是不能有输出的,PHP有另外一个函数 session_regenerate_id() 如果使用这个函数,这之前也是不能有输出的。

                setcookie(session_name(),
                          session_id(),
                          session.cookie_lifetime,//默认0
                          session.cookie_path,//默认'/'当前程序跟目录下都有效
                          session.cookie_domain,//默认为空
                          )

         4. 如果存在那么session_id = $_COOKIE[session_name];
            然后去session.save_path指定的文件夹里去找名字为'SESS_' . session_id()的文件.
            读取文件的内容反序列化,然后放到$_SESSION中
    * 2. 为$_SESSION赋值
      比如新添加一个值$_SESSION['test'] = 'blah'; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,
用把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源.      这个阶段有可能执行更改session_id的操作,
比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义 session操作,角色的转换上,
比如Drupal.Drupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id

        if (isset($_COOKIE[session_name()])) {
          setcookie(session_name(), '', time() - 42000, '/');//旧session cookie过期
        }
        session_regenerate_id();//这一步会生成新的session_id
       //session_id()返回的是新的值

      3.写入SESSION操作
      在脚本结束的时候会执行SESSION写入操作,把$_SESSION中值写入到session_id命名的文件中,可能已经存在,
可能需要创建新的文件。
    * 4. 销毁SESSION
      SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,
比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多,
          o 1. setcookie(session_name(), session_id(), time() - 8000000, ..);//退出登录前执行
          o 2. usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。
          o 3. session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id

      当不关闭浏览器的情况下,再次刷新,2和3都会有COOKIE传过来,但是找不到数据

2.session.save_handler = user

      用户自定义session处理机制,更加直观
    * session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');
1.session_start(),
      执行open($save_path, $session_name)打开session操作句柄
      $save_path 在session.save_handler = files的情况下它就是session.save_path,
但是如果用户自定的话,这个两个参数都用不上,直接返回TRUE

      执行read($id)从中读取数据.//这个参数是自动传递的就是session_id(),可以通过这个值进行操作。
    * 2.脚本执行结束
      执行write($id, $sess_data) //两个参数,很简单
    * 3.假如用户需要session_destroy()
      先执行destroy.在执行第2步

      一个实际例子:

 代码如下 复制代码

      //SESSION初始化的时候调用
      function open($save_path, $session_name)
      {
        global $sess_save_path;
        $sess_save_path = $save_path;
        return(true);
      }

      //关闭的时候调用
      function close()
      {
        return(true);
      }

      function read($id)
      {
        global $sess_save_path;
        $sess_file = "$sess_save_path/sess_$id";
        return (string) @file_get_contents($sess_file);
      }
      //脚本执行结束之前,执行写入操作
      function write($id, $sess_data)
      {
        echo "sdfsf";
        global $sess_save_path;

        $sess_file = "$sess_save_path/sess_$id";
        if ($fp = @fopen($sess_file, "w")) {
          $return = fwrite($fp, $sess_data);
          fclose($fp);
          return $return;
        } else {
          return(false);
        }

      }

      function destroy($id)
      {
        global $sess_save_path;

        $sess_file = "$sess_save_path/sess_$id";
        return(@unlink($sess_file));
      }

      function gc($maxlifetime)
      {
        global $sess_save_path;

        foreach (glob("$sess_save_path/sess_*") as $filename) {
          if (filemtime($filename) + $maxlifetime < time()) {
            @unlink($filename);
          }
        }
        return true;
      }


PHP Session在您把用户信息存储到 PHP session 中之前,首先必须启动会话。

注释:session_start() 函数必须位于 <html> 标签之前:

 代码如下 复制代码

<?

php session_start(); ?>

<html>
<body>

</body>
</html>

上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID。
存储 Session 变量
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:

 代码如下 复制代码

<?php
session_start();
// store session data
$_SESSION['views']=1;
?>

<html>
<body>

<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>

</body>
</html>

输出:

Pageviews=1

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • R语言 如何删除指定变量或对象

    这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • 解决vue的router组件component在import时不能使用变量问题

    这篇文章主要介绍了解决vue的router组件component在import时不能使用变量问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • Vue select 绑定动态变量的实例讲解

    这篇文章主要介绍了Vue select 绑定动态变量的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-23
  • 深入理解PHP变量的值类型和引用类型

    在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型,在使用的时候,需要注意这一点。看到网友在讨论PHP的&符号,要彻底理解它的用法,就有必要讨论一下变量的两种形式。PHP的变量在内存中是这样...2015-10-23
  • java中String类型变量的赋值问题介绍

    下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
  • C#不同类型的成员变量(字段)的默认值介绍

    虽然C#编译器为每个类型都设置了默认类型,但作为面向对象的设计原则,我们还是需要对变量进行正确的初始化。实际上这也是C#推荐的做法...2020-06-25
  • C++中的循环引用

    虽然C++11引入了智能指针的,但是开发人员在与内存的斗争问题上并没有解放,如果我门实用不当仍然有内存泄漏问题,其中智能指针的循环引用缺陷是最大的问题。下面通过实例代码给大家介绍c++中的循环引用,一起看看吧...2020-04-25
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • Smarty模板学习笔记之Smarty简介

    1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
  • 详解ES6实现类的私有变量的几种写法

    这篇文章主要介绍了详解ES6实现类的私有变量的几种写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10
  • python 实现循环定义、赋值多个变量的操作

    这篇文章主要介绍了python 实现循环定义、赋值多个变量的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Nest.js环境变量配置与序列化详解

    这篇文章主要给大家介绍了关于Nest.js环境变量配置与序列化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-21
  • C++变量,常量,数组和字符串详解

    这篇文章主要介绍了C++变量,常量,数组和字符串,是C++入门学习中的基础知识,需要的朋友可以参考下,希望能够给你带来帮助...2021-10-21
  • 在JS中如何使用css变量详解

    这篇文章主要给大家介绍了关于如何在JS中如何使用css变量以及export之javascript关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2021-09-02
  • C#设置与获取环境变量的方法详解

    这篇文章主要给大家介绍了关于C#设置与获取环境变量的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。...2020-06-25
  • php Observer观察者模式之学习笔记

    当我们在星际中开地图和几家电脑作战的时候,电脑的几个玩家相当于结盟,一旦我们出兵进攻某一家电脑,其余的电脑会出兵救援。 那么如何让各家电脑知道自己的盟友被攻击了...2016-11-25
  • 基于条件变量的消息队列 说明介绍

    本篇文章小编为大家介绍,基于条件变量的消息队列 说明介绍。需要的朋友参考一下...2020-04-25
  • Perl中的特殊内置变量详细介绍

    这篇文章主要介绍了Perl中的特殊内置变量详细介绍,需要的朋友可以参考下...2020-06-29