Cookie
创建cookie
cookie是http头标的组成部分,一定要在其他内容发送之前就要发送,所以必须最先输出
使用setcookie()
函数创建
setcookie(string name[,string value[,int expire[, string path[,string domain[,int secure]]]]])
读取cookie
直接通过超级全局数组$_COOKIE[]来读取浏览器端的Cookie值,举个例子
<?php
date_default_timezone_set("Etc/GMT-8");
if(!isset($_COOKIE["visittime"])){ //如果Cookie不存在
setcookie("visittime",date("y-m-d H:i:s")); //设置一个Cookie变量
echo "欢迎您第一次访问网站!"."<br>"; //输出字符串
}else{ //如果Cookie存在
setcookie("visittime",date("y-m-d H:i:s"),time()+60); //设置带Cookie失效时间的变量
echo "您上次访问网站的时间为:".$_COOKIE["visittime"]; //输出上次访问网站的时间
echo "<br>"; //输出回车符
}
echo "您本次访问网站的时间为: ".date("y-m-d H:i:s"); //输出当前的访问时间
?>
删除cookie
方法有两种:一种是使用setcookie()函数删除,另一种是在浏览器中手动删除Cookie。下面分别进行介绍。
使用setcookie()函数删除Cookie
删除Cookie和创建Cookie的方式基本类似,删除Cookie也使用setcookie()函数。删除Cookie只需要将setcookie()函数中的第二个参数设置为空值,将第3个参数Cookie的过期时间设置为小于系统的当前时间即可。
例如,将Cookie的过期时间设置为当前时间减1秒,代码如下:
setcookie("name", "", time()-1);
Session
了解Session
翻译为“会话”,当启动一个Session会话时,会生成一个随机且唯一的session_id,也就是Session的文件名,此时session_id存储在服务器的内存中
,当关闭页面时此id会自动注销,重新登录此页面,会再次生成一个随机且唯一的id。
主要的步骤是:启动会话→注册会话→使用会话→删除会话
启动会话
方式有两种:一种是使用session_start()
函数,另一种是使用session_register()
函数为会话登录一个变量来隐含地启动会话。使用session_start()
之前浏览器同样不能有任何输出
注册会话
会话变量被启动后,全部保存在数组$_SESSION中。通过数组$_SESSION创建一个会话变量很容易,只要直接给该数组添加一个元素即可。
例如,启动会话,创建一个Session变量并赋予空值,代码如下:
<?php
session_start(); //启动Session
$_SESSION["admin"] = null; //声明一个名为admin的变量,并赋空值
?>
使用会话
首先需要判断会话变量是否有一个会话ID存在,如果不存在,就创建一个,并且使其能够通过全局数组$_SESSION进行访问。如果已经存在,则将这个已注册的会话变量载入以供用户使用。
举个例子:
<?php
if ( !empty ( $_SESSION['session_name'])) //判断用于存储用户名的Session会话变量是否为空
$myvalue = $_SESSION['session_name'] ;//将会话变量赋给一个变量$myvalue
?>
删除会话
- 删除单个会话
删除会话变量,同数组的操作一样,直接注销$_SESSION
数组的某个元素即可。
例如,注销$_SESSION['user']
变量,可以使用unset()
函数,代码如下:
unset ( $_SESSION['user'] ) ;
- 删除多个会话
- 如果想要一次注销所有的会话变量,可以将一个空的数组赋值给
$_SESSION
,代码如下:
$_SESSION = array() ;
- 结束当前会话
如果整个会话已经结束,首先应该注销所有的会话变量,然后使用session_destroy()
函数清除结束当前的会话,并清空会话中的所有资源,彻底销毁Session,代码如下:
session_destroy() ;
Session设置时间
客户端没有禁止Cookie
- 使用
setcookie()
函数可对Session设置失效时间,例子:
<?php
session_start();
$time = 1*60;
setcookie(session_name(),session_id(),time()+$time,"/"); # 使用setcookie手动设置Session失效时间
$_SESSION['user'] = 'mr'
客户端禁止Cookie
1)在登录之前提醒用户必须打开Cookie,这是很多论坛的做法。
2)设置php.ini文件中的session.use_trans_sid = 1,或者编译时打开-enable-trans-sid选项,让PHP自动跨页面传递session_id。
3)通过GET方法,隐藏表单传递session_id。
4)使用文件或者数据库存储session_id,在页面间传递中手动调用。