【二十五】cookie与session学习总结
一:cookie
1.创建cookie
关键字:setcookie 用于保存cookie
原理:当浏览器访问cookie.php页面时,我们的服务器就会以set-cookie的方式将cookie信息回送到http响应,当浏览器获取到信息后,会保存在本机
//第一个参数:cookie(key).第二个参数:表示val.第三个参数表示cookie值 setcookie("name","huahua",time()+3600); echo "成功";
2.查询cookie(获取客户端的cookie信息)
cookie信息是保存在$_COOKIE超全局数组中的
// 超全局数组 echo "<pre>"; print_r($_COOKIE); echo "</pre>"; //获取指定的键对应的值 $name=$_COOKIE['name']; echo "$name";
3.更新cookie(重新设置cookie)
关键字:setcookie:参考创建cookie
4.删除cookie
// 删除某个键值对 setcookie("password","",time()-3600); // 删除所有键值对 foreach ($_COOKIE as $key => $value) { setcookie("$key","$value",time()-3600); }
实例:判断你是否第一次登陆
if (!empty($_COOKIE['lastvisit'])){ echo "您上次登陆的时间为".$_COOKIE['lastvisit']; setcookie('lastvisit',date("Y-m-d H:i:s"),time()+3600); }else{ echo "您是第一次登陆"; setcookie('lastvisit',date("Y-m-d H:i:s"),time()+3600); }
二:session
1.添加session
<?php session_start(); // 字符串 $_SESSION["name"]="huahua"; // 数字 $_SESSION['aeg']=18; // 布尔值 $_SESSION["isgirl"]=true; // 数组 $arr1=array("hah","我们"); $_SESSION["arr1"]=$arr1; // 对象 class Dog{ private $name; private $intro; function __construct($name,$intro){ $this->name=$name; $this->intro=$intro; } public function getname(){ return $this->name; } } $d=new Dog("xiaogou","i am good"); $_SESSION["dog1"]=$d; echo "ook"; // 使用超全局数组查看session echo "<pre>"; print_r($_SESSION); echo "</pre>"; ?>
2.获取cookie数据
<?php // 获取所有的session数据 echo "获取session数据"; // 需要开启session session_start(); echo "<pre>"; print_r($_SESSION); echo "</pre>"; // 字符串 echo "name=".$_SESSION["name"]; echo "<br/>"; // 数字 echo "age=".$_SESSION["aeg"]; echo "<br/>"; // 数组 foreach ($_SESSION["arr1"] as $key => $value) { echo "$key=$value<br/>"; } // 取对象数据 // 需要加载类的信息。因为是从session中取得数据,而session中并没有保存类的信息 class Dog{ private $name; private $intro; function __construct($name,$intro){ $this->name=$name; $this->intro=$intro; } public function getname(){ return $this->name; } } $xiaogou=$_SESSION["dog1"]; echo $xiaogou->getname(); ?>
3.更新session数据
<?php session_start(); $_SESSION["name"]="hei"; $_SESSION["aeg"]=99; echo "更新成功"; echo "<pre>"; print_r($_SESSION); echo "</pre>"; ?>
4.删除session数据
<?php session_start(); // 删除指定键值对 unset($_SESSION['name']); // 删除所有的session信息 session_destroy(); ?>
购物大厅例题:
buy.php
<?php echo "<h1>购物大厅</h1>"; if (isset($_GET['PHPSESSID'])) { session_id($_GET['PHPSESSID']); // 重置该页面的ssesion_id } session_start(); $sid=session_id(); // echo SID; SID的输出为PHPSESSID=mpsav4071jlu8iue98tiujdp91 echo "<a href='shoppre.php?bookid=sn001&bookname=天龙八部&PHPSESSID=$sid'>天龙八部</a><br/>"; echo "<a href='shoppre.php?bookid=sn002&bookname=聊斋&PHPSESSID=$sid'>聊斋</a><br/>"; echo "<a href='shoppre.php?bookid=sn003&bookname=红楼梦&PHPSESSID=$sid'>红楼梦</a><br/>"; echo "<a href='shoppre.php?bookid=sn004&bookname=西游记&PHPSESSID=$sid'>西游记</a><br/>"; echo "<a href='buylist.php?PHPSESSID=$sid'>查看您购买的商品列表</a>"; ?>
showpre.php
1 <?php 2 if (isset($_GET['PHPSESSID'])) { 3 session_id($_GET['PHPSESSID']); 4 } 5 //注意:sid的设置在session_start之前还是之后 6 $sid=session_id(); 7 session_start(); 8 // 接收书号和书名 9 $bookid=$_GET['bookid']; 10 $bookname=$_GET['bookname']; 11 12 $_SESSION["$bookid"]="$bookname"; 13 echo "购买商品成功"; 14 echo "<a href=buy.php?PHPSESSID=$sid>返回购物大厅</a>"; 15 ?>
buglist.php
1 <?php 2 if (isset($_GET['PHPSESSID'])) { 3 session_id($_GET['PHPSESSID']); 4 } 5 session_start(); 6 echo "购物车商品有:<br/>"; 7 foreach ($_SESSION as $key => $value) { 8 echo "书号是$key,书名是$value<br/>"; 9 } 10 ?>
界面显示:
问题:当用户禁用cookie后,怎样使用session技术共享多个页面呢?(重写url)
- 在每个超链接上添加一个 PHPSESSID=session id。同时每个页面判断是是否有已生成的session id 。看上例子
- 使用常量SID。
- 设置php.ini下的session.use_trans_sid = 1