Session
Session 指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也
就是用户浏览这个网站所花费的时间。从上述的定义中我们可以看到,Session 实际上是一
个特定的时间概念。
一般来说,在网站上某一个页面中的变量(指服务器端变量,下同)是不能在下一页中用
的,有了session就好办了。session中注册的变量可以作为全局变量使用。这样我们就可以
将session用于用户身份认证,程序状态记录,页面之间参数传递。
如何创建SESSION
使用session之前不能有任何输出
使用session 必须开启标志 代码为
<?php
Session_start();
?>
在PHP中session 会话是保存在一个全局数组中,这个数组为$_SESSION,你可以通过增加数
组索引增加会话元素。看例子
<?php
session_start();//开启session标志
$_SESSION['USER'] = 'zppx';//设置一个会话元素USER 值为zppx
$_SESSION['pass'] = 'password';//设置一个会话元素pass 值为password
?>
将以上代码保存为session_1.php,并浏览
同时新建一个文件为session_2.php
代码为
<?php
session_start();//开启session标志
//查看设置的结果
print_r($_SESSION);
?>
浏览可以查看输出的结果:
Array ( [USER] => zppx [pass] => password )
说明我们的会话已经产生作用
现在我们来看下一个简单的使用原理
<?php
//简单的计数器
session_start();
if(!isset($_SESSION['counter'])){
$_SESSION['counter'] = 1;
}else{
$_SESSION['counter'] ++;
}
echo $_SESSION['counter'];
?>
保存为session_3.php
不断的浏览刷新这个页面可以看到值在不断的变化
现在需要我们来解释几个问题。
1. 如何修改已经保存的session的值呢?
$_SESSION['NAME'] = 'PHP';
2. 销毁session
session_unset();
session_destroy();
3. 查看sessionid ,session_id()
echo session_id();
4. session编码与解码
$string = session_encode();
echo $string;
session_unset();
session_decode($string);
print_r($_SESSION);
session相关参数的解释
/* *
* session 用来跟踪用户的状态,默认生成sessionid
* session 配置的相关参数
* session_auto_start 开启session
* session_name 发送到客户端得session cookie名称 默认为 phpsesionid
* session.cookie_lifetime 生命周期
* session.cookie_path 有效路径 默认“/”不需要需该
* session.cookie_domain 对什么域名有效
* session_sava_handler session存储到什么文件,默认为 files文件
* session_save_path 存储路径
* session_gc_maxlifetime 过期时间
* session.use_trans_sid 跟踪当COOKIE禁用采用url
* 查看当前会话配置
* session_get_cookie_params();
* session_set_cookie_params();
*
*
*
* */
//print_r(session_get_cookie_params());
COOKIE
cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
PHP 在http 协议的头信息里发送cookie,因此 setcookie() 函数必须在其它信息被输出到浏览器
前调用,这和对 header() 函数的限制类似
cookie 是个很小的 文本文件4kb,当用户访问网站时,会立即生成个这样的文件,保存在
用户的客户端
通常以username@domainname保存
* cookie技术
* 1.记录访客的信息
* 2.页面之间传递变量
设置cookie
使用 setcookie()函数设置cookie
如 setcookie("visit","php",mktime()+86400,"/")
参数祥解:setcooke(name, value, expires, path , domain, secure);
* cookie 属性
* 1.name 名字(必须)
* 2.value 值
* 3.expires 过期时间(必须)
* 4.path 设置“/” 表示这个域所有数组都可以访问
* 5.domain 有效的域名
* 6.secure 布尔值 ,如果为true 表示只有ssl加密连接才发送cookie到客户端
代码片段
<?php
$value = 'szzppx';
setcookie("TestCookie", $value); /* 简单 cookie设置 */
setcookie("TestCookie", $value, time()+3600); /* 有效期 1个小时 */
setcookie("TestCookie", $value, time()+3600, "/~zppx/",".xxx.com", 1); /* 有效目录 /~zppx,有
效域名 xxx.com 及其所有子域名 */
?>
Cookie 的读取:
直接用php 内置超级全局变量$_COOKIE 就可以读取浏览器端的cookie
之前我们设置了个visit
现在我们来读取
print $_COOKIE[visit];
cookie 的删除:
只需把有效时间设为小于当前时间,和把值设置为空
如:setcookie("visit ", "", time()-1);
常见问题解决:
1) 用 setcookie()时有错误提示,可能是因为调用setcookie()前面有输出或空格。也可能你的文
档是从其他字符集转换过来,文档后面可能带有 BOM 签名(就是在文件内容添加一些隐藏
的BOM 字符)。解决的办法就是使你的文档不出现这种情况。还有通过使用ob_start()函数
也能处理一点。
2) $_COOKIE 受magic_quotes_gpc 影响,可能自动转义。
3) 使用的时候,有必要测试用户是否支持cookie。
<?php
/* *
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);//修改错误提示信息
ini_set('display_errors',true);//设置PHP错误提示
*/
if(!isset($_COOKIE['visit'])){
setcookie("visit","php",mktime()+86400,"/") or die("客户端禁止cookie");
echo "hellow first";
}else{
echo "second";
}
下面为一个完成的cookie操作类,供后期参考
<?php
class cookieclass{
private $cookiename;
private $cookievalue;
private $cookieexpiry;
public function __construct(){
$num_args = func_num_args();
if($num_args >0){
$args = func_get_args();
$this->cookiename = $args[0];
$this->cookievalue = $args[1];
$this->cookieexpiry = $args[2];
$this->cookieset();
}
}
//设置cookie
public function cookieset(){
try{
if($this->cookiename !="" && $this->cookievalue !="" &&
$this->cookieexpiry !=""){
setcookie($this->cookiename,$this->cookievalue,time()+$this->cookieexpiry);
}else{
throw new exception("你必须对cookie设置个名字和过期时间");
}
}catch(exception $e){
echo $e->getmessage();
}
}
//修改cookie中指定的值
public function change($newvalue){
$_COOKIE[$this->cookiename] = $newvalue;
}
//取得需要的值
public function getvalue(){
return $_COOKIE[$this->cookiename];
}
//删除某个值
public function remove(){
$this->change("");
}
}
?>
//建立个COOKIE
$mycookie = new cookieclass("cookieid","php","60");
echo $mycookie->getvalue();