Cookie Session and Memcached.php
来源:原创
时间:2016-07-23
作者:脚本小站
分类:代码笔记
<?php
//==========================COOKIE===========================
//-----------------------------------------------------------
/*
Cookie属于头信息,勿在头信息前有任何的输出
*/
//-------------------------------------------------------
//--------------------向Cookie中传值--------------------
/* cookie中只能保持字符串,不可以存入数组 */
$time=time()+60*60*7;//设置保存的时间
//变量名,值,保存时间,还有其他参数无需关注
setCookie("name","how are you",$time);
setCookie("name1","howyou",$time);
//-------------------------------------------------------
//-------------------删除Cookie中的值-------------------
$time=time();//将时间设为当前时间
//将值清空,时间改为当前或以前的时间,或不传值与时间
setCookie("name","",$time-200);
setCookie("name1","",$time);
setCookie("name1");
//-------------------------------------------------------
//---------------------调用Cookie------------------------
//在任意一页面中
echo $_COOKIE['name'];
//===========================================================
//=========================SESSION===========================
//-----------------------------------------------------------
session_cache_expire //设置或者获取session过期的时间
session_cache_limiter //设置或者获取session缓存的类型
session_commit //终止由session_start()函数开启的session可写入状态 session_write_close()函数的别名
session_decode //D将被序列化的session数据还原
session_destroy //销毁所有的已注册的session
session_encode //序列化当前session中的所有数据
session_get_cookie_params//获取session cookie的相关数据的参数
session_id //定义或者获取当前的session id
session_is_registered //检测一个session是否已注册
session_module_name //取得或者设置一个session的储存形式
session_name //设置或者取得一个session name
session_regenerate_id //更新现有的session id
session_register //将一些字符串或者数组注册到session中
session_save_path //设置或者取得一个session在服务器短的保存路径
session_set_cookie_params//设置session cookie的相关数据的参数
session_set_save_handler //方便自定义的设置session在服务器端的相关操作
session_start //开启session
session_unregister //取消一个已注册的session
session_unset //清空所有注册了的session值
session_write_close //终止由session_start()函数开启的session可写入状态
//==================基于cookie的session使用=================
//---------------------开启session方法----------------------
/*
1.每个页面都要 session_start()
2.关闭浏览器$_SESSION[]的值消失
每第一次开启就创建一个session_id并分配给客户端保存,
默认保存在cookie中,当访问其他页面时会带着这个客户端
的id当有id时不创建id。要想使用session每个页面都要写se
ssion_start()。将php.ini中1056行的 session.auto_start =
1 则每页可以不写session_start()就可开启session 但是有
功能限制,如对象就不可以放在session中了,所以此方法不
建议使用。session_start()前不要有任何输出,属于头函数
*/
session_start(); //开启session
/*
session.name = PHPSESSID 设置session名 约1053行
session.cookie_path = / cookie的路径
session.gc_maxlifetime = 1440 最大的生存时间
*/
//-------------------------------------------------------
//------------------向session里传值---------------------
$_SESSION['a']="hello";
$_SESSION['b']=array(1,2);
//-------------------------------------------------------
//-----------------输出session里的值--------------------
echo $_SESSION['a']; //输出某个值
print_r($_SESSION); //打印出整个session数组
//-------------------------------------------------------
//----------------输出session id的两种方法--------------
echo session_id();
//可以看出session_id是存放在cookie中的
echo $_COOKIE[session_name()];
//====================删除session的值========================
//1.---------------删除session中的某个值----------------
session_start();
unset($_SESSION['a']);//删除session中的值
/*但不可以unset($_SESSION)这是删除整个数组,下次使用则
受影响*/
//2.------------------清空整个session值-----------------*
session_start();
//1.清空$_session值,直接赋空值
$_SESSION=array();
//2.删除客户端的在cookie中的session id,先判断再删除
if(isset($_COOKIE[session_name()])){
/*此时的cookie要指定路径,因为在配置文件中指定了
路径session.cookie_path = / */
setCookie(session_name(),"",time(),"/");
}
//最后彻底销毁session
session_destroy();
//===================基于UIRL的session=======================
//--------------超链接中地址加入session值-------------------
//在接收页面加入判断,判断有没有session id
if($_GET['sid']){
//设置session id
session_id($_GET['sid']);
}
//在超链接中加入session id的值
<a href="index.php?sid=<?php echo session_id(); ?>>">首页</a>
//-------------------------------------------------------
//--------------------用session名传值-------------------
//PHPSESSION为SESSION名,用session名传值不用指定session_id()
<a href="index.php?PHPSESSION=<?php echo session_id(); ?>>">首页</a>
//------------------------------------------------------
//----------------------手动加SID-----------------------
/* SID:如果基于Cookie,SID则为空。如果关闭Cookie,SID则
为PHPSESSION = cbdskvbfsbvvbhkfv45b */
<a href="index.php?<?php echo SID ?>>">首页</a>
//-------------------------------------------------------
//-----------------------自动加SID-----------------------*
/* 将配置文件中的1134行改为 session.use_trans_sid = 1 即
可支持自动加SID功能。
只支持一般的超链接自动加SID,不行的只能手动添加,如
header('index.php')是不会自动添加的*/
<a href="index.php">首页</a>
//============================================================
//=================解决跨机保存session设置问题==============
//session信息保存的路径
session.save_path = "C:/session"
//session名称
session.name = PHPSESSION
//自动开启session,不建议自动开启,有功能限制
session.auto_start = 0 //1为开启 0为关闭
//没开启Cookie时在链接中自动添加SID
session.use_trans_sid = 1
//-------------------------------------------------------
//----------------session信息的清除---------------------
/*session生存时间,指定关闭浏览器后过了多少秒就会被视
为垃圾,并根据如下概率清除*/
session.gc_maxlifetime = 1440
/*在初始化时启动session_start()即启动了垃圾回收器
此概率为session.gc_probability / session.gc_diviso 即两
值相除如下:两值相除为 1/100 */
session.gc_probability = 1
session.gc_divisor = 100 //此值根据网站的访问人数而定
//-------------------------------------------------------
//------------session基于cookie的cookie设置-------------
//是否使用cookie保存客户端会话
session.use_cookies =1
//cookie指定cookie保存的路径
session.cookie_path = "/"
//指定设置cookie会话的域名,默认为空,自动
session.cookie_domain = ""
/*cookie保存的时间,默认时间为0,表示关闭浏览器cookie就
消失。如果此值不为0,则无论浏览器是否关闭或用户是否有
动作,过了设置的时间cookie就会消失,即:过了设置时间就
要重新登陆。*/
session.cookie_lifetime = 0
//-------------------------------------------------------
//----------------session信息保存的方式-----------------
/*session信息保存的方式,以文件形式保存值为 files也为
默认值,如果自定义保存方式则值为 user。 如果保存在
memcache中则值为memcache 且服务器路径
session.save_path =tcp://localhost::11211 */
session.save_handler = files
//================跨机保存session信息的操作方法=============
//---------------session_set_save_handler的使用--------------
//使用前先改值 session.save_handler = user
session_set_save_handler();
//--------------------------------------------------------
//启动会话
//在运行session_start()时执行该函数
function open($save_path,$session_name){
echo "open<br>";
}
//在写关闭session_write_close()与销毁session_destroy()时执行
function close(){
echo "close<br>";
}
//读取session到$_SESSION中
//在运行session_start()与写入$_SESSION 时执行
function read($session_id){
echo "read<br>";
}
//脚本结束时和session_write_close()强制提交数据时执行
function write($session_id,$session_data){
echo "write<br>";
}
//执行session_destroy()时执行
function destroy($session_id){
echo "destroy<br>";
}
//由session.gc_probability和session.gc_divisor决定的,
//在执行open(),read()时也会执行gc()
function gc($maxlifetime){
echo "gc<br>";
}
session_set_save_handler("open","close","read","write","destroy","gc");
session_start();
//===========================================================
//-----------------------------------------------------------
//========================Memcached==========================
//---------------------命令提示符下运行---------------------
/*
安装:
memcached -d install [uninstall]
memcached -d start
net start "Memcached Server"
卸载:
memcached -d stop
memcached -d remove
sc delete "Memcached Server"
连接 Memcache
telnet localhost 11211
Memcache命令
get 得到数据
set 设置数据
add 添加数据
replace 替换数据
append 追加数据
delete 删除数据
stats 查看状态
quit 退出
...
//-----------------------------------------------------------
//-------------stats查看状态信息中英文对照-----------------
pid memcache 服务器的进程ID
uptime 服务器已经运行的秒数
time 服务器当前的unix时间戳
version memcache版本
pointer_size 当前操作系统的指针大小(32位系统一般是32bit)
rusage_user 进程的累计用户时间
rusage_system 进程的累计系统时间
curr_items 服务器当前存储的items数量
total_items 从服务器启动以后存储的items总数量
bytes 当前服务器存储items占用的字节数
curr_connections 当前打开着的连接数
total_connections 从服务器启动以后曾经打开过的连接数
connection_structures 服务器分配的连接构造数
cmd_get get命令(获取)总请求次数
cmd_set s et命令(保存)总请求次数
get_hits 总命中次数
get_misses 总未命中次数
evictions 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
bytes_read 总读取字节数(请求字节数)
bytes_written 总发送字节数(结果字节数)
limit_maxbytes 分配给memcache的内存大小(字节)
threads 当前线程数
//-----------------------------------------------------------
//----------------memcached的基本设置:---------------------
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
*/
//===========================================================
//------------Memcache 面向对象的常用接口包括:------------
Memcache::add //添加
Memcache::connect //打开一个到Memcache的连接
Memcache::pconnect //打开一个到Memcache的长连接
Memcache::close //关闭一个Memcache的连接
Memcache::set //保存数据到Memcache服务器上
Memcache::get //提取一个保存在Memcache服务器上的数据
Memcache::replace //替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::delete //从Memcache服务器上删除一个保存的项目
Memcache::flush //刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
Memcache::getStats //获取当前Memcache服务器运行的状态
Memcache::addServer //分布式服务器添加一个服务器
//Memcached 为 Memcache的进程
//===========================================================
//----------------向memcached添加数据-----------------------
$mem=new Memcache;
$mem->connect("localhost",11211);
//添加多个服务器
//mem->addServer("www.baidu.com","11221");
//-------------------------------------------------------
//-------------------添加数据---------------------------
//参数位:数据名,保存的数据,[常量,[保存时间]]
//MEMCACHE_COMPRESSED此常量表示用压缩的方式保存
$mem->add("mystr","How are you",MEMCACHE_COMPRESSED,3600);
//添加数组
//常量与保存时间不写的话默认30天
$mem->add("mystr1",array("hello","world","nihao"));
//添加对象
class person{
var $name="Stephne";
}
$mem->add("mystr2",new person);
//-------------------------------------------------------
//--------------------输出数据--------------------------
echo $mem->get("mystr");
print_r($mem->get("mystr1"));
var_dump($mem->get("mystr2"));
//关闭
$mem->close();
//===========================================================
//------------------覆盖已添加的值--------------------------
//二者都可
$mem->set("mystr","How are you---",MEMCACHE_COMPRESSED,3600);
$mem->replace("mystr","How are you---",MEMCACHE_COMPRESSED,3600);
//-----------------------------------------------------------
//----------------------删除值-------------------------------
$mem->delete("mysre");//删除一个
$mem->flush(); //删除所有
//-----------------------------------------------------------
//--------------------获取信息------------------------------
$mem->getVersion(); //获取版本信息
$mem->getStats(); //取得状态
//-----------------------------------------------------------
//---------------------应用实例-----------------------------*
$mem=new Memcache;
$mem->connect("localhost",11211);
//将sql语句作为数据名
$sql="select id,title,addtime from film ";
$key=$sql;
//从memcached得到值
$data=$mem->get($key);
//判断$data里面是否有值,如果没有则进行传值
if(!$data){
//连接数据库
$pdo=new PDO("mysql:host=localhost;dbname=film","root","320723");
//执行查询语句
$stmt=$pdo->prepare($sql);
$stmt->execute();
$data=array();
//将值传入$data
while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
$data[]=$row;
}
//添加值到memcached
$mem->set($key,$data,MEMCACHE_COMPRESSED,3600);
echo "加载数据完成";
}
//输出值
print_r($data);
//关闭
$mem->close();
//===========================================================
//-----------------------------------------------------------