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(); //=========================================================== //-----------------------------------------------------------