ホームページ php教程 php手册 cookie与session区别和关系

cookie与session区别和关系

Jun 13, 2016 am 09:55 AM
cookie session そして について 関係 共有 違い そして 詳しい 説明する

分享一篇关于cookie和session区别详细说明的文章,有需要的朋友可以参考一下,很有价值的一篇文章。cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。 PHP用SetCookie函数来设置Cookie。 SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下:
int SetCookie(string name, string value, int expire, string path, string domain, int secure);
参数说明:cookie名称,cookie值,过期时间(int),有效路径,有限域名,https传递才有效

 代码如下 复制代码
注意:当前设置的Cookie不是立即生效的,而是要等到下一个页面时才能看到.这是由于在设置的这个页面里Cookie由服务器传递给客户浏览器,在下一个页面浏览器才能把Cookie从客户的机器里取出传回服务器的原因。
使用例子: 普通使用: setcookie('name','PHP淮北'); 带失效时间的: 
setcookie('name','PHP淮北',time()+24*60*60);//1day
Cookie是面向路径的 ,默认存储在当前文件下,如果没有设置路径,不同文件下的cookie默认保存在不同文件夹下,如图:默认保存在mytest文件夹下 phphuaibei/201111/201111151945348209.png"> 2、接收和处理Cookie 用户端与服务端的web通信协议是http。而PHP通过http取得用户数据惯用的三种方法分别是:POST方法、GET方法还有Cookie。而PHP默认传递方法正是Cookie,也是最佳方法。 比如设置一个名为MyCookier的Cookie,PHP会自动从WEB服务器接收的HTTP头里把它分析出来,并形成一个与普通变量一样的变量,名为$myCookie,这个变量的值就是Cookie的值 3,删除Cookie   要删除一个已经存在的Cookie,有两个办法:
  1. 一是调用只带有name参数的SetCookie,那么名为这个name的Cookie将被从关系户机上删掉;例如:setcookie('name','');
  2. 另一个办法是设置Cookie的失效时间为time()或time()-1,那么这个Cookie在这个页面的浏览完之后就被删除了(其实是失效了)。 例如:setcookie('name','PHP淮北',time()-24*60*60);
         要注意的是,当一个Cookie被删除时,它的值在当前页在仍然有效的。 
使用Cookie的注意事项:
    1. 首先是必须在HTML文件的内容输出之前设置(Cookie是HTTP协议头的一部分,用于浏览器和服务器之间传递信息,所以必须在任何属于HTML文件本身的内容输出之前调用Cookie函数。
在PHP页面可以先使用 ob_start();//开启 code….. ob_end_flush(); //刷新缓存 可以防止header提示错误);
  1. 不同的浏览器对Cookie的处理机制不一样
  2. cookie限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。
  3. 当前设置的Cookie不是立即生效的,而是要等到下一个页面时才能看到
Session介绍 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息,每一个网站访客都会被分配给一个唯一的标志符,即会话ID,它的存放形式无非两种:要么经过url传递,要么保存在客户端的Cookies里.当然,你也可以将Session保存到数据库里,这样会更安全,但效率方面会有所下降.url方式传递安全性肯定太差,PHP的会话机制是通过设置Cookie,在Cookie中保存会话id(Session ID),在服务器端会生成session文件,与用户进行关联,Web应用程序存储与这些Session相关的数据,并在各页面间进行传递. PHP相关函数 在PHP中有关Session的函数比较多,不过我们最常用到的也就这么几个函数: session_start():启用session机制,在需要用到session的程序文件的最开始调用它. session_register():注册session变量 session_unregister(): 删除session变量(一个一个删除) session_is_registered(): 判断session变量是否注册 session_distroy(): 销毁所有session变量(所有session变量销毁,包括文件) 需要注意下面几个方面: 1.函数session_start()必须在程序最开始执行,在其前面不能有任何输出内容,否则     就会出现“Warning:Cannot send session cookie - headers already    sent"类似这样的警告信息. 2.函数session_register()用于注册要保存在session中的相关变量,其用法如下:   $val = "session value";   session_register("val"); ?> val即为要注册的session变量名,在注册时一定不要加上"$"符号,只写其变量名称即可. 3.函数session_unregister()与上面函数用法完全相同,但功能相反,上面函数是注册 session变量,而其则是删除指定的session变量. 4.函数session_is_registered()用于判断session变量是否注册. 5.函数session_destroy()主要用于在系统注销和退出时,销毁所有的session变量,它没有参数,直接调用即可。 Session与PHP.ini的关系配置 1,session.save_handler = file 用于读取/回写session数据的方式,默认是files。它会让PHP的session管理函数使用指定的文本文件存储session数据 2,session.save_path = “/xammp/temp/”   指定保存session文件的目录,可以指定到别的目录,但是指定目录必须要有httpd守护进程属主(比如apache或www等)写权限,否则无法回存session数据。它还可以写成这样session.save_path = “N;/path” 其中N是整数。这样使得不是所有的session文件都保存在同一个目录中,而是分散在不同目录。这对于服务器处理大量session文件是很有帮助的。(注:目录需要自己手工创建) 3,session.auto_start = 0   如果启用该选项,用户的每次请求都会初始化session。不推荐使用,最好通过session_start()显示地初始化session。   上图:左侧是保存在xammp/tmp/下的session文件,内容是PHP序列化的格式 右侧:第一行是echo serialize($_SESSION['name']);//序列化 第二行是打印session值 *****************其中文件名是session-name,内容是PHP序列化的格式   cookie与session的区别和关系
  • 存储位置:
    1. session存储在服务器位置上,可以通过php.ini里面配置session相关配置
    2. cookie存储在客户端上的上(其实可以分两种:
1,持久性cookie,设置了cookie的时间,以文件方式存在硬盘上, 2,会话cookie,没有设置cookie时间,cookie的生命周期也就是关闭浏览器前就消失,一般不会保存在硬盘,而是保存在内存上) cookie和session的关系 从上面的图可以看到: cookie通过http报头发送: Cookie  <font face="Arial">name=PHP%BB%B4%B1%B1; PHPSESSID=cpt2ah3pi4cu7lo69nfbfllbo7</font> <font face="Arial" size="2">其中PHPSESSID就是关联服务器session的重要参数</font> <font face="Arial" size="2">再看session文件:sess_cpt2ah3pi4cu7lo69nfbfllbo7</font> <font face="Arial" size="2">session_id的生成格式就是:sess_加上一串PHPSESSID的值</font> <font face="Arial" size="2">我们可以这样理解:</font> 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识 (称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来 使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相 关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应 中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给 服务器。一般这个cookie的名字都是类似于SEEESIONID php.ini里面关于session和cookie有关的配置 1,session.use_cookie = 1
是否采用Cookie方法传递session id值。默认是1,表示启用。
2,session.name = PHPSESSID
不管是Cookie传递sessioin_id,还是GET方法传递session_id,都需要使用键值。他们的格式分别是Cookie:  sess_name=session_id;和/path.php?sess_name=session_id,其中sess_name就是由这里指定的。
3,session.use_only_cookies = 0
表示只使用Cookie 的方法传递session id。我们说过,传递cookie的方法,除了cookie,还有GET方法,GET方法是不安全的方法。在用户端禁用了cookie的时候,会采用GET方法传递session_id,可以通过这个设置尽用GET方法传递session_id。
4,session.cookie_lifetime = 0, session.cookie_path = / 以及session.cookie_domain =
如果使用Cookie方法传递session_id的话,这里分别指定了cookie有效域、目录和时间。分别对应setcookie()函数的形参$expire、$path和$domain。其中cookie_lifetime=0表示直到关闭浏览器才删除Cookie。还可以使用session_set_cookie_params()函数修改这些值。
5,session_name([string $name])
获取或更新session_name。如果传了name,则表示不使用默认的名称PHPSESSID(由session.name)指定,否则获取当前session_name。注意:如果设置session_name,则必须在session_start()之前调用才生效。
6,session_id([string $id])
与session_name()类似,但它是读取或者设置session_id的方法。同样,设置session_id的话,必须在session_start()之前调用才有效。
7,session_set_cookie_params()和session_get_cookie_params()
通过session_set_cookie_params()可以重新设定session.cookie_lifetime, session.cookie_path以及session.cookie_domain这三个php.ini设置。而session_get_cookie_params()则是获取这些设定的值。
  总结:
  1. 服务端session的相对于客户端的cookie安全性要较高一点
  2. session在服务器集群的时候容易不同步,而cookie不会
ps:下午关于使用cookie退出出现的问题 当退出的时候使用: setcookie('username','',time()-3600);
    setcookie('name','',time()-3600);
理论上cookie应该正常清除,测试的时候发现第一登录退出完全正常,但是再次登录就是退出不了,cookie始终存在,很是郁闷,使用firebug查看原来页面设置了缓存,使用nginx设置了页面缓存,原因也就是找到了
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

韓国のビットコインと国内のビットコインに違いはありますか? 韓国のビットコインと国内のビットコインに違いはありますか? Mar 05, 2025 pm 06:51 PM

ビットコインの投資ブームは、世界初の分散型デジタル資産であるため、増加し続けています。中国はかつてビットコインの最大の市場でしたが、政策の影響は取引制限につながりました。今日、韓国は世界の主要なビットコイン市場の1つになっており、投資家はITとその国内ビットコインの違いに疑問を投げかけています。この記事では、両国のビットコイン市場間の違いに関する詳細な分析を行います。韓国と中国のビットコイン市場の違いの分析。たとえば、2024年10月下旬、韓国のビットコインの価格はかつてでした

Nexo Exchangeは安全ですか? Nexo Exchangeは安全ですか? Mar 05, 2025 pm 07:39 PM

Nexo:それは暗号通貨交換であるだけでなく、デジタルファイナンシャルマネージャーでもあります。これにより、ユーザーは担保として暗号通貨でローンを取得することができ、関心を得るためのサービスを提供します。 Nexoは暗号通貨の購入、販売、償還機能も提供していますが、その中心的なビジネスは暗号融資です。この記事では、投資家により包括的な理解を提供するために、Nexoの運用モデルとセキュリティを詳細に調査します。 Nexoのオペレーティングモデルは2018年に設立され、スイスのZugに本社を置き、デジタルファイナンスの分野の先駆者です。これは、他の集中交換とは異なり、包括的な金融サービスの提供に重点を置いています。ユーザーは、資産を販売せずに暗号通貨を売買、取引することができます

エーテルとビットコインの違いは、エーテルとビットコインの違いは何ですか エーテルとビットコインの違いは、エーテルとビットコインの違いは何ですか Mar 19, 2025 pm 04:54 PM

イーサリアムとビットコインの違いは重要です。技術的には、BitcoinはPowを使用し、EtherはPowからPOSに移行しました。ビットコインの取引速度は遅く、イーサリアムは高速です。アプリケーションシナリオでは、Bitcoinは支払いストレージに焦点を当て、EtherはスマートコントラクトとDAPPをサポートしています。発行に関しては、ビットコインの総量は2100万人であり、エーテルコインの総額は固定されていません。各セキュリティチャレンジが利用可能です。市場価値に関しては、ビットコインが最初にランク付けされ、両方の価格の変動は大きいですが、特性が異なるため、イーサリアムの価格動向はユニークです。

ビットコインの憶測は株式投機ですか?なぜ? 2つの違いは何ですか? ビットコインの憶測は株式投機ですか?なぜ? 2つの違いは何ですか? Mar 05, 2025 pm 02:24 PM

ビットコイン:デジタルゴールドまたはストック取引デリバティブ?新たな投資方法としてのビットコインの性質の詳細な分析。この記事では、定義、自然、発行メカニズムなどの側面から詳細について説明し、ビットコイン投資の謎を明らかにします。ビットコインと株式:ビットコインと株式の本質的な違いは、ビットコインへの投資は株式への投資と同じではありません。ビットコインは、デジタル資産または仮想資産のカテゴリに属する​​分散型デジタル通貨です。この概念は、2009年に中本atによって提案されました。従来の通貨とは異なり、

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

Bean BreadとDeepseekの違いは何ですか Bean BreadとDeepseekの違いは何ですか Mar 12, 2025 pm 01:24 PM

Bean BunとDeepseekのコアの違いは、検索の精度と複雑さです。 1. Doubaoは、シンプルで直接的なキーワードのマッチングに基づいていますが、低コストですが、精度が低く、構造化されたデータにのみ適しています。深い学習に基づいています。最終的な選択は、アプリケーションのシナリオとリソースの制限に依存します。

暗号投資のメンタリティは非常に重要です!不必要な心配を避け、正しい決定を下す方法は? 暗号投資のメンタリティは非常に重要です!不必要な心配を避け、正しい決定を下す方法は? Mar 05, 2025 pm 07:24 PM

暗号投資の恐怖、不確実性、疑い:情報に基づいた意思決定を行う方法は?多くの暗号投資家は、「これは最後のサイクル」に対する恐怖と、強気市場の期間に関する懸念に直面しており、他の人からの圧力と相まって、それが一緒になって投資の決定につながります。この記事では、これらの課題を克服し、より賢い投資の選択をする方法を模索します。潜在的なリスク:気晴らし:盲目的にホットスポットを追いかけ、コア資産の価値を無視します。悲観主義とためらい:不確実性は、自信の欠如、長い間保持できないこと、さらには市場から退場することにつながります。信念の欠如:プロジェクトに関する詳細な研究の欠如であり、市場のボラティリティに対処できません。利益作成戦略の欠如:プルバックの恐怖、潜在的なリターンの欠落のために、ポジションを早期にクリアする。対処戦略:1。コア領域に焦点を当てる:

お金を稼ぐ可能性が高いために通貨契約を運営する方法は?いくつかのヒントがあります お金を稼ぐ可能性が高いために通貨契約を運営する方法は?いくつかのヒントがあります Mar 05, 2025 pm 01:48 PM

通貨契約:リスクが高く、利益の確率を高める方法を備えた両刃の剣?通貨サークルの多くの退役軍人は、契約取引の大きな可能性に惹かれてきました。これは、寛大なリターンをもたらすだけでなく、大きな損失につながることができます。契約取引は本質的にデジタル通貨の派生物であり、そのリスクが高いと高いリターンが多くの注目を集めています。それでは、通貨サークル契約取引の利益の確率を高める方法は?これには、いくつかの重要なスキルが必要です。この記事では、リスクを減らし、収益性を向上させる方法を詳細に説明します。通貨サークルの契約利益戦略:不安定な暗号通貨市場では、契約取引で安定した利益を達成したい場合は、包括的な戦略を策定し、それを厳密に実装する必要があります。潜在的な損失を制御し、単一の取引を避けるために、停止損失価格を事前に設定します

See all articles