目錄
session技术
欢迎购买
购物车商品有
首頁 php教程 php手册 php session cookie

php session cookie

Jun 06, 2016 pm 07:54 PM
cookie php session 科技

1. session session技术 思考问题? 我们在浏览网站,去购物的时候,张三和李四,可以购买不同的商品,并且在查看购物车时候,可以看到各自购买的商品? 思路1: 数据库 2. cookie3 -?? 当你登陆某个网站,你可以在任何一个网页,查看登陆的名字? 思路 1. 数据

1.  session 

session技术

思考问题?

我们在浏览网站,去购物的时候,张三和李四,可以购买不同的商品,并且在查看购物车时候,可以看到各自购买的商品?

 

思路1: 数据库 2. cookie3 ->??

 

当你登陆某个网站,你可以在任何一个网页,查看登陆的名字?

思路

1. 数据库

2. cookie

问题: 安全性/ 在网络传数据(带宽的问题)

3. 解决之道->session.

 

在默认情况下session文件将被保存在c:/windows/temp

 

u 思考的问题?

用户无需登陆,就可以访问到我们的管理页面,并且可以对用户进行curd操作.

解决之道->session

 

 

u Session的初步介绍

 

① Session是服务器端技术

② 注意:一个会话对应一个Session文件

③ 原理示意图:

 

④ session的基本用法(crud) 增删改查.

 

3.1 如何保存session 数据

 

代码 :

 

 

    echo "
***演示如何保持session数据**
";

    //1.初始化session

       session_start();

    //2.保存数据

       $_SESSION['name']="shunping";

    //session文件中可以保存dobule, integer, bool, array, object

    //保存inter bool

       $_SESSION['age']=100;

       $_SESSION['isBoy']=true;

 

    //保存数据

    $arr1=array("北京","小明","hello");

       $_SESSION['arr1']=$arr1;

 

    //保存一个对象到session文件

       class Dog{

              private $name;

              private $age;

              private $intro;

              function __construct($name,$age,$intro){

                     $this->name=$name;

                     $this->age=$age;

                     $this->intro=$intro;

              }

       }

 

    $dog1=new Dog("大狗",5,"很好的一只狗");

       $_SESSION['dog1']=$dog1;

    echo "保存ok";

 

?>

 

对代码说明:

* 保存的数据格式:

name|s:8:"shunping";age|i:100;isBoy|b:1;arr1|a:3:{i:0;s:6:"北京";i:1;s:6:"小明";i:2;s:5:"hello";}dog1|O:3:"Dog":3:{s:9:"

name 就是 key

s: 表示数据类型

8: 数据大小

* 我们的session中可以保存的数据类型是

string,integer,double , bool array, object.

3.2 如何获取session的数据

 

代码

 

 

    echo "
获取session数据
";

       require_once "Dog.class.php";

       session_start();

    //获取session

    //1.把所有的session获取

       echo "

";
登入後複製

       print_r($_SESSION);

       echo "";

 

    //2.通过key来指定获取某个值

    echo "
名字是:".$_SESSION["name"];

      

       $arr1=$_SESSION['arr1'];

 

    echo "
数组的数据是:";

       foreach($arr1 as $key=>$val){

              echo "
--$val";

       }

    //3.取出对象

    //保存一个对象到session文件

      

 

       $xiaogou=$_SESSION['dog1'];

 

    echo "
小狗的名字:".$xiaogou->getName();

?>

 

 

小结:

(1) 要使用session,都需要初始化 sesssion_start();

(2) session文件中可以放入多个  keyval对 , 注意 key不能重复,val可以是基本数据类型,和array,对象.

(3) 如果我们要取出对象,则需要实现申明一下类的定义信息.

 

3.3更新session数据

 

 

 

    //更新

       session_start();

 

    $_SESSION['name']="顺平";

 

    echo "更新成功!";

?>

 

3.4 删除session数据

 

 

 

    //删除sessoin信息

    //1.删除某一个keyval

       session_start();

       //unset($_SESSION['name']);

 

    //2.删除所有的 keyval

    //这样就会把当前这个浏览器对应的session文件删除.

       session_destroy();

 

    echo "删除session成功!";

?>

 

思考: 如果没有手动删除session,那么系统是怎么维护.

 

 

 

u session的细节讨论

① session数据默认存放时间是1440秒, 这个时间可以通过 php.ini文件来修改

 

session.gc_maxlifetime =1440

时间可以自定 ,修改后,也要重新启动apache,

这个时间是指定在1440秒内,没有使用session文件,该session才会被当做垃圾,从而被回收.

② session 文件存放的路径是可以修改php.ini 文件

session.save_path ="c:/mysession"

修改后,需要重新启动apache

 

③ 在使用session的时候,应当保证 对session进行初始化,

方法1; 在需要使用session页面都写入 session_start();

2. 在php.ini 文件中,配置session.auto_start=1 (不推荐)

④ 服务器是怎样实现,一个session文件为一次会话服务的,原理是

 


 

u session的实际运用

购物车实际案例—给出界面,然后实现为后面讲解禁用cookie后

还能使用session的知识点.

 

要求不使用数据库,使用session完成.

 

代码:

 

MyHall.php

 

    //购物大厅

    echo "

欢迎购买

";

    echo "天龙八部
";

    echo "红楼梦
";

    echo "西游记
";

    echo "聊斋
";

       echo "


";

    echo "查看购买到的商品列表";

 

?>

 

ShowProcess.php

 

    //接收用户购买请求,并把书保存到session中.

      

       $bookid=$_GET['bookid'];

       $bookname=$_GET['bookname'];

 

    //保存到session中

       session_start();

       $_SESSION[$bookid]=$bookname;

 

    echo "
购买商品成功!";

    echo"
返回购物大厅继续购买";

 

?>

 

ShowCart.php

 

 

    echo "

购物车商品有

";

 

       session_start();

 

       foreach($_SESSION as $key=>$val){

      

       echo"
书号--$key 书名--$val";

       }

 

?>

 

 

再请思考一个问题?:

如果用户禁用cookie?

 

 

当用户禁用cookie后,服务器每次 session_start() 都会 创建一个全新的seesion文件,后果就是无法让多个页面php,去共享同一份session文件.

 

如何解决问题? 从cookie sessoin 和http协议入手解决

 

 

请问? 如果客户端禁用cookie,怎样实现session技术共享多个页面?

答:

(1)在每个超链接上添加一个PHPSESSID=sesssionId;

同时在每个页面加入:

if(isset($_GET[‘PHPSESSID’]){

    //设置sesssion_id

    session_id($_GET[‘PHPSESSID’]);

}

session_start();...

(2) 使用常量SID

   使用方法如下:

在超链接 action header(“Location: xx”) 可以直接拼接 SID常量即可

echo"西游记
";

 

(3) 可以启用session.use_trans_sid 指定是否启用透明 SID 支持 即可以这样设置

 

ssssion. use_trans_sid = 1 ,这样重启apache即可生效.

 

具体处理代码:

MyHall.php

 

 

       if(isset($_GET['PHPSESSID'])){

              session_id($_GET['PHPSESSID']);

       }

 

       session_start();

      

 

       //echo "sid====".SID;

 

    //购物大厅

    echo "

欢迎购买

";

    echo "天龙八部
";

    echo "红楼梦
";

    echo "西游记
";

    echo "聊斋
";

       echo "


";

    echo "查看购买到的商品列表";

 

?>

 

ShopProcess.php

 

    //接收用户购买请求,并把书保存到session中.

      

    //保存到session中

       if(isset($_GET['PHPSESSID'])){

              session_id($_GET['PHPSESSID']);

       }

      

       session_start();

      

 

       $bookid=$_GET['bookid'];

       $bookname=$_GET['bookname'];

 

       $_SESSION[$bookid]=$bookname;

 

    echo "
购买商品成功!";

    echo "
返回购物大厅继续购买";

 

?>

 

ShowCart.php

 

    echo "

购物车商品有

";

 

    //这里不能让服务器创建一个新的session

 

       if(isset($_GET['PHPSESSID'])){

              session_id($_GET['PHPSESSID']);

       }

       session_start();

 

       foreach($_SESSION as $key=>$val){

      

       echo "
书号--$key 书名--$val";

       }

 

?>

 

 

u 再看一个session的实际运用案例

如何防止用户非法登录.

 

思路如图:


代码

loginProcess.php  增加:

if($name!=""){

     //把登陆信息写入cookie'loginname':$name

     //把登陆表 把登陆的人ipid..

     //合法

     session_start();

     $_SESSION['loginuser']=$name;

     header("Location:empManage.php?name=$name");

     exit();

   }

在编写commmon.php文件中添加了一个函数

//把验证用户是否合法封装函数

   function checkUserValidate(){

     session_start();

     //先写在封

     if(empty($_SESSION['loginuser'])){

        header("Location:login.php?errno=1");

     }

   }

在需要防止用户非法登录页面中引入这样两句(这两句话,放在页面的开头)

require_once'common.php';

       checkUserValidate();

 

u session技术的实际运用

验证码

 

为什么我们需要验证码

1. 防止登录时,恶意攻击

2. 防止灌水.

.......

验证码实现思路图分析:

 

代码: 直接在我们雇员管理系统中增加验证码功能:

 

1. checkCode.php 这个文件引入到你的项目中

 

php session  cookie

3. 在loginProcess.php 页面中,添加对验证码的处理

代码

//先看看验证码是否ok

       session_start();

       if($checkCode!=$_SESSION['myCheckCode']){

              header("Location:login.php?errno=2");

              exit();

       }

u php.ini文件中关于cookie和session的设置

 

① session.name

该配置用于设置session的名字,这个值可以通过 session_name() 来获取.

② session.use_trans_sid 默认是0,

session.use_trans_sid= 0

说明:给每个url启用 session名=sessionId ,对安全有影响,不推荐开启

③ sessoin.save_path = 路径

可以配置把网站的session文件放在哪个目录下.

 

④ 三个一组:

session.gc_maxlifetime= 1440

说明:session默认最大生命周期

session.gc_probability= 1

session.gc_divisor= 1000

 

说明: 上面三个配置,共同来决定,session的垃圾回收清除.

 

原理图 机制


说明: 当某个用户操作session的时候,会使用到session_start(), 该函数会调用gc ,但是其概率是  session.gc_probability/ session.gc_divisor

原因是: 对于一个网站说,有很多用户访问,因此当大量用户访问的时候,概率很多. 如果网站的规模越大,我们建议 把这个概率设置越小.

 

演示

session.gc_maxlifetime= 30

说明:session默认最大生命周期

session.gc_probability= 1000

session.gc_divisor= 1000

 

⑤ session.cookie_lifetime= 0

 

该设置可以指定cookie默认生命周期,默认是0,表示当关闭浏览器后,该cookies失效,你可以这样

setcookie(“名字”,”val”,time()+3600);

setcookie(“名字”,”val”);

 

 

u 自定义会话处理器

 

说: session 的各种操作,都可以同自定义会话处理来自己决定, 靠

session_set_save_handler

如果你要自定义处理session,需要在php.ini文件中做一个设置.

session.save_handler= [files\user]

 

需求: 为什么session文件打头是sess_* ,我们能

不能自己定义session文件名? hsp_*

 

代码如下:

 

 

       function open($save_path, $session_name)

{

  global $sess_save_path;

 

  $sess_save_path = $save_path;

  return(true);

}

 

function close()

{

  return(true);

}

 

function read($id)

{

  global $sess_save_path;

 

  $sess_file ="$sess_save_path/hsp_$id";

  return (string)@file_get_contents($sess_file);

}

 

function write($id,$sess_data)

{

  //echo "id=$id ********************数据 $sess_data
";

  global $sess_save_path;

 

  $sess_file ="$sess_save_path/hsp_$id";

  if ($fp = @fopen($sess_file, "w")){

    $return = fwrite($fp, $sess_data);

    fclose($fp);

    return $return;

  } else {

    return(false);

  }

 

}

 

//session_destory()

function destroy($id)

{

  global $sess_save_path;

 

  $sess_file ="$sess_save_path/hsp_$id";

  return(@unlink($sess_file));

}

 

function gc($maxlifetime)

{

  global $sess_save_path;

 

  foreach(glob("$sess_save_path/hsp_*") as $filename) {

    if (filemtime($filename) + $maxlifetime

      @unlink($filename);

    }

  }

  return true;

}

 

//session_set_save_handler有六个回调函数.

session_set_save_handler("open","close", "read", "write", "destroy","gc");

 

session_start();

 

 

$_SESSION['aa']="helloworld";

 

?>

 

通过该案例: 我们充分体会 session的操作流程,是可以修改...

session数据可以存放的位置

(1) 文件

(2) 数据库

(3) 内存(memcache)

(4) 网络文件nfs

 

u sesson和cookie的对比:

  

2.  cookie


 cookie①-cookie原理介绍 创建cookie 获取cookie

  

     什么是会话

打开浏览器,访问某个网站的很多页面(通过点击超连接), 当你关闭浏览器后,一个会话结束.

     思考一个问题?

在一个会话过程,中,用户会产生一些数据,比如购物车.每个用户查看购物车的时候,看到自己的选择,怎么实现?

思路:

     再思考一个问题?

为什么youku可以保存你上次看过的电影?

     解决之道

会话技术-cookiesession  =>http协议

问题: 如何提示用户上次登录网站的时间,如何保存上次用户浏览的信息,如何保证用户在一定时间内,不用反复登录...

     cookie

cookie的初步介绍

1.      cookie是保存在客户端.

2.      画图说明

118.jpg (95.33 KB, 下载次数: 0)

下载附件

2 分钟前 上传

3.      cookie的基本使用(curd)

3.1    如何创建cookie

代码cookie1.php

       //演示如何创建cookie信息

       //把用户名和密码保存到客户端的cookie

       //这个函数用于保存cookie

       //第一个参数表示cookie一个key 第二个参数表示 val,第三个参数表示cookie值,在

       //客户端保存时间,按秒计算

       // key value

       // key value

       //.....

       setCookie("name","shunping",time()+3600);

       setCookie("password","12345",time()+30);

   setCookie("address","北京",time()+300);

       echo "保存成功!";

?>

对代码说明

①    当浏览器访问  cookie1.php页面的时候,我们的服务器就会以

Set-Cookie: name=shunping; expires=Wed, 21-Sep-201107:53:25 GMT 回送http响应,当浏览器获取到该信息后,就会保存该cookie 的新到

本机的  c:/xxx/admin/cookies文件.

②    如果我们如果没有该时间(第三个参数)

cookie不会保存到客户端,当浏览器的会话结束,我们的cookie就失效.

③   cookie能保存什么样的信息,就是字符串.

④ 客户端可以保存多个keyvalue 对

④   cookie也可以保存中,默认将会对中文进行 urlencode进行编码

⑥ cookie 可以有多个 键值 对,可以给不同的键值 ,指定不同的有效时间.

3.2    如何从客户端获取保存的cookie信息 (查询)

代码:

       //获取cookie信息

       echo "

";

       print_r($_COOKIE);

       echo "

登入後複製
";

      

       //获取指定的key对应的值

       $name=$_COOKIE['name'];

      

       echo "name=".$name;

?>

对代码说明:

①    如果cookie有效时间到,则不能取出.

②    客户端cookie信息是怎样传递给服务器

通过 http协议的

Cookie: name=shunping

这个机制是http协议 规定

 



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles