变量的“追随”:cookie与session_PHP
Cookie
变量的“追随”:cookie与session 作者: 来源: 互联网 浏览数:44
放大阅读 |
字号选择:〖大 中 小〗 |
在很多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用一组变量来“追随”访客。实现变量“追随”有很多种方法,比较用得多的是cookie和session。下面我们用时下很流行的PHP为大家讲解一下它们的使用。
一.Cookie的使用 Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到客户端。在Cookie生效之后及失效之前,客户每次发出页面请求的时候,都会把Cookie一块发送到服务器,只要我们针对它进行相应的处理,就可以实现变量“追随”。 1. 设置一个Cookie变量 设置一个Cookie变量,PHP使用的函数是: 其中name是Cookie变量名称标识,你在PHP中将可以象使用普通变量名一样来用它引用Cookie变量。value是Cookie变量的初始值,expire 表示该Cookie变量的有效时间;path 为该Cookie变量的相关路径;domain 表示Cookie变量的网站;secure 则需在 https 的安全传输时才有效。 例如我们要设置一个变量username,它的值是字符串“bluewind”,我们可以这么写代码: 我们还想给这个变量设置有效时间来限制操作超时等,比如说10分钟: 注意:setcookie和header函数一样,需要放在任何能向客户端输出的语句之前。 2. 销毁一个变量 销毁Cookie变量只要将它的value设为空(“”)就可以了,如想销毁上面那个变量只要再写一次: 就可以了。这常用作安全退出之用。 3. Cookie的有效范围和生存期 Cookie的有效范围(也就是说在这个范围的页面都能得到这个Cookie变量)默认的是该目录及其子目录,当然你可以用setcookie的path和domain参数进行修改。如果你不对cookie的expire进行设置(参见1. 设置一个Cookie变量中的例子),那么当你离开网站的页面,cookie也同时得到自动销毁。 http://www.netscape.com/newsref/std/cookie_spec.html是 cookie 原创者 Netscape 所提供的完整介绍信息。 二,session的使用 session变量,也就是会话级变量,是访客在整个和网站交互的过程中都存在的公有变量。在客户端不支持有可能不支持cookie的时候(比如linux下的lynx……呵呵,惨了点),我们为了保证数据正确安全,就需要采用session变量。Session在各种网页语言中的实现方式不一样,PHP在4.0后也开始支持它了。首先,让我们来看看一个简单的例子: 1、初始一个session 如果PHP的设置自动session并没有开启的话,需要使用session_start()函数来初始化一个session,这个函数的用法如下: 它的作用是初始化一个新的 Session,若该客户已在 Session 之中,则连上原 Session。本函数没有参数,且返回值均为 true。 2、在session中注册一个变量 你要在session保存的变量都必须使用下列函数对变量进行注册: 本函数在全局变量中增加一个变量到目前的 Session 之中。参数 name 即为欲加入的变量名。成功则返回true 值。 然后你就可以直接使用变量名对它进行赋值,这个值就会被保存下来。 3、使用session变量的值 如上例所示,只要你再在新的页面重复上两个步骤(除了赋值外),就可以直接使用session变量。 4、session的销毁 如果你只是想注销一个变量而不是摧毁整个变量的话,那需要使用函数: 用法很简单,参数 name 即为欲删除的变量名。成功则返回 true 值。 但是,如果要整个“摧毁”session变量的话,比如说安全退出什么的,使用函数: 本函数结束目前的 Session。本函数没有参数,且返回值均为 true。 5、其它有用的session函数 a、 检查变量是否注册 本函数可检查目前的 Session 之中是否已有指定的变量注册。参数 name 即为欲检查的变量名。成功则返回true 值。 b、 给注册变量归null 这个函数可以把当然注册的所有的session变量置为空。注意它不是unregister,也不同于destroy。 下面这个例子,对此函数做了很好的说明。 c、定制你自己的session处理方法 这个函数可以定义用户级的session的保存函数(打开、关闭、写入等)。比如,我们想把session保存在本地的一个数据库中时,本函数就很有用了。缺省情况下,每个session存贮在系统临时目录的一个个独立文件中(例如在unix系统中为/tmp)。这适合或不适合,依你的需求而言。例如:如果你的支持php的web服务器分布在不同的机器上,你不能很容易地共享它们之间的session(当然,你也可以将sessions保存在NFS共享中)。另一个潜在的问题是你机器上的数千或数百万个session文件使你的文件系统变得散乱 。注意:这个函数是在4.0b4版本后才出现的。使用本函数前,先要配置php.ini文件,session.save_hadler=user ,否则,session_set_save_handler()不会生效。 此外,根据我的测试,你如果想让这样的session跨页面使用,还要在每一个用到session的脚本文件中加入你自定的函数及session_set_save_handler,所以,最好的方法是做成一个单独的文件,在每一个要用到session的脚本中用include来包含进来。 下面这个例子提供了一个最基本的session保存法,类似于默认的files方法。如果你想用数据库来实现,这也是很容易做到的。
<code>int setcookie(string name, string value, int expire,
string path, string domain, int secure);</code>
<code>setcookie (“username”,“bluewind”); //这两个参数是setcookie必要的。</code>
<code>setcookie (“username”,“bluewind”, 600000); //有效时间的单位是毫秒。</code>
<code>setcookie (“username” ,“”);</code>
<code>
test.php
-----------
session_start();
session_register(var); //注册变量var
$var="这是SESSION变量的值"; //var变量已经被作为session变量
?>
test1.php
------
session_start();
session_register(var);
echo $var; //输出:“这是SESSION变量的值”
?>
</code>
<code>: boolean session_start(void);</code>
<code>boolean session_register(string name);</code>
<code>boolean session_unregister(string name);</code>
<code>boolean session_destroy(void);</code>
<code>boolean session_is_registered(string name);</code>
<code> void session_unset(void); </code>
<code>
<?php session_register('a','b','c'); //auto-session-start
$a=1;
$b=2;
$c=3;
session_unregister('a'); //unregistrered $a
echo "A: $a - reg:".session_is_registered('a')." ";
// but the global $a remains
session_unset(); // unsets $b und $c
echo "B:$b - reg:".session_is_registered('b')." ";
// the registration remains !
echo "C:$c - reg:".session_is_registered('c')." ";
echo session_encode();
?>
输出:
A: 1 - reg:
B: - reg:1
C: - reg:1
!b|!c|
</code>
<code>
void session_set_save_handler (string open, string close, string read,
string write, string destroy, string gc)
</code>
<code>
Example:session_set_save_handler() example
<?php function open ($save_path, $session_name) {
global $sess_save_path, $sess_session_name;
$sess_save_path = $save_path;
$sess_session_name = $session_name;
return(true);
}
function close() {
return(true);
}
function read ($id) {
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "r")) {
$sess_data = fread($fp, filesize($sess_file));
return($sess_data);
} else {
return("");
}
}
function write ($id, $sess_data) {
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
return(fwrite($fp, $sess_data));
} else {
return(false);
}
}
function destroy ($id) {
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}
/*********************************************
* WARNING - You will need to implement some *
* * sort of garbage collection routine here. *
* *********************************************/
function gc ($maxlifetime) {
return true;
}
session_set_save_handler
("open", "close", "read", "write", "destroy", "gc");
session_start();
// proceed to use sessions normally
// 现在你就可以象往常一样地使用session了。
?>
</code>

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

MetaMask(中文也叫小狐狸錢包)是一款免費的、廣受好評的加密錢包軟體。目前,BTCC已支援綁定MetaMask錢包,綁定後可使用MetaMask錢包進行快速登錄,儲值、買幣等,且首次綁定還可獲得20USDT體驗金。在BTCCMetaMask錢包教學中,我們將詳細介紹如何註冊和使用MetaMask,以及如何在BTCC綁定並使用小狐狸錢包。 MetaMask錢包是什麼? MetaMask小狐狸錢包擁有超過3,000萬用戶,是當今最受歡迎的加密貨幣錢包之一。它可免費使用,可作為擴充功能安裝在網絡

Go語言提供了兩種動態函數創建技術:closures和反射。 closures允許存取閉包作用域內的變量,而反射可使用FuncOf函數建立新函數。這些技術在自訂HTTP路由器、實現高度可自訂的系統和建置可插拔的元件方面非常有用。

在C++函數命名中,考慮參數順序至關重要,可提高可讀性、減少錯誤並促進重構。常見的參數順序約定包括:動作-物件、物件-動作、語意意義和遵循標準函式庫。最佳順序取決於函數目的、參數類型、潛在混淆和語言慣例。

1. SUM函數,用於對一列或一組單元格中的數字進行求和,例如:=SUM(A1:J10)。 2、AVERAGE函數,用於計算一列或一組儲存格中的數字的平均值,例如:=AVERAGE(A1:A10)。 3.COUNT函數,用於計算一列或一組單元格中的數字或文字的數量,例如:=COUNT(A1:A10)4、IF函數,用於根據指定的條件進行邏輯判斷,並返回相應的結果。

C++函數中預設參數的優點包括簡化呼叫、增強可讀性、避免錯誤。缺點是限制靈活性、命名限制。可變參數的優點包括無限彈性、動態綁定。缺點包括複雜性更高、隱式型別轉換、除錯困難。

C++中的函數傳回參考類型的好處包括:效能提升:引用傳遞避免了物件複製,從而節省了記憶體和時間。直接修改:呼叫方可以直接修改傳回的參考對象,而無需重新賦值。程式碼簡潔:引用傳遞簡化了程式碼,無需額外的賦值操作。

C++中的異常處理可透過自訂異常類別增強,提供特定錯誤訊息、上下文資訊以及根據錯誤類型執行自訂操作。定義繼承自std::exception的異常類,提供特定的錯誤訊息。使用throw關鍵字拋出自訂異常。在try-catch區塊中使用dynamic_cast將捕獲到的異常轉換為自訂異常類型。在實戰案例中,open_file函數會拋出FileNotFoundException異常,捕捉並處理該異常可提供更具體的錯誤訊息。
