首頁 php教程 PHP开发 PHP中session使用方法詳解第2/2頁

PHP中session使用方法詳解第2/2頁

Dec 24, 2016 am 09:27 AM
php session

PHP中session詳解2

  綜述 
  Session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。從上述的定義中我們可以看到,Session其實是一個特定的時間概念。 
  一般來說,在網站上某一個頁面中的變數(指伺服器端變量,下同)是不能在下一頁中用的,有了session就好辦了。 session中註冊的變數可以當作全域變數使用。這樣我們就可以將session用於使用者身分認證,程式狀態記錄,頁面之間參數傳遞。 

  在PHP3版本中是如何實現session的? 
  php3本身是沒有實作session功能的,我們只有用其他的方法來實現,這其中最有名的要算phplib了。 phplib最基本的功能包括使用者認證、Session管理、權限及資料庫的抽象化。下面我們就來講述一下如何用phplib實作session。

  1、先安裝phplib(環境為win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 for win32) 

  到Apache的安裝目錄下。例如:Apache安裝在d:Apache 目錄下,那麼就將"php"目錄拷貝到d:Apache,並將phplib目錄的pages目錄下(不包括目錄本身)的檔案和目錄一起拷貝到d:Apachehtdocs下。 

  phplib的類別庫需要根據系統進行初始化,可能需要修改local.inc檔,其中包含著一些基本參數,可以根據自己機器的實際情況來進行修改。 

  將d:Apachephpprepend.php檔案中的一段程式改為如下樣子: 

    if (!isset($_PHPLIB) or !is_array($_PHPLIB)) { 
      $_PHPLIB["libdir"] = "d:/Apache/php/"; //放phplib下php目录的路径 
    } 
  修改d:\Apache\php\local.inc文件: 
    class DB_Example extends DB_Sql { 
      var $Host = "localhost"; //mysql数据库所在主机名 
      var $Database = "test"; //数据库名 
      var $User = "root"; //数据库用户名 
      var $Password = "1234567"; //数据库用户密码 
    }
登入後複製

  最後根據phplib目錄下的stuff子目錄中的create_database.mysql檔產生初始表。
  由於每一個使用phplib的頁面首先必須可以找到運行phplib所必需的類庫文件,我們可以在php.ini中設置auto_prepend變量來支援,phplib中包含一個prepend.php文件,並將auto_prepend指定為"d :/Apache/php/prepend.php"(帶引號)後,各頁就會自動包含phplib類別庫,我們也可以將phplib類別庫所在目錄加進include變數中,以便可以找到這些檔案。

2、呼叫page_open()函數 

  在每一個使用phplib的頁面中,必須先呼叫page_open函數進行初始化,例如: 

  <?php 
  page_open(array("sess" => "Test_Session")); 
  ?>
登入後複製

數組變數(sess)用這裡初始化一些狀態保存物件,這裡應該注意:必須使用phplib內建名(sess),這些內建名是在local.inc中所定義的.。 
  因為phplib使用了Cookies來保存狀態資訊,所以page_open()函數必須在頁面內容輸出到瀏覽器之前被呼叫。 php腳本最後應以page_close()結束,這將會將有關狀態資料寫回資料庫,否則變數會遺失。 

  3、具體使用。 

  註冊一個變數後即可在隨後的頁面中使用它,直到session結束。方法: 
    <?php $sess->register( "varname"); ?> 
  注意,這裡的varname不是變數值,而是變數名,可以先指定變數名,然後再賦值。你在某個頁面中可以改變變數的值,隨後的頁面訪問該變數時會得到改變後的值。變數的型別是多樣的,可以是一個字串,一個數字,一個陣列。舉例說明: 
  第一頁: 
    <?php 
    page_open(array("sess" => "Test _Session"); ; //註冊變數$welcome,注意不需要加上$ 
    $welcome="Hello,PHP world!"; 
    … 
    page_close(); 
    page_close();
    <?php 
    page_open();//開始session 
    echo $welcome; //顯示第一頁定義的$welcome 
    page_close();//儲存狀態資訊 
    ?> 
  註冊完一個變數,當頁面被寫入最後一個變數。如果忘記呼叫page_close()函數的話,變數就不會被寫回資料庫,這樣將出現不可預測的後果。當變數被使用完畢,不再需要用到時,可以調用以下函數將變數刪除: 

    <?php 
    page_open(array("sess" => "Test _Session")); 
    …… 
    $sess->unregister( "variable_name"); 
    …… 
    page_close(); 
    ?>
登入後複製

在PHP4版本中是如何实现session的? 

  php4的session也靠cookies保存session id,用文件系统保存变量(默认情况下),因此,它的session变量不能保存对象。当然也可以将session保存在数据库中。 
  在php4中有关session的函数很多(详见php.ini配置一文),通常情况下我们只需要调用三个函数即可:sesssion_start()、session_register()、session_is_registered()。 
  在需要用到session的每一页的最开始处调用session_start()函数, 例如: 
    <?session_start()?> 
    <html><body> 
    <? 
    $welcome="hello world !"; 
    session_register("welcome");//注册$welcome变量,注意没有$符号 
    if(session_is_registered("welcome"))//检查$welcome变量是否注册 
      echo "welcome变量已经注册了!"; 
    else 
      echo "welcome变量还没有注册!"; 
    ?> 
    </body></html> 
  php4中session处理的定制 
  我们需要扩充6个函数: 
    sess_open($sess_path, $session_name); 
    这个函数被session处理程序调用来作初始化工作。 
    参数$sess_path对应php.ini文件中的session.save_path选项 
    参数$session_name对应php.ini中的session.name 选项。 
    sess_close(); 
    这个函数在页面结束执行并且session处理程序需要关闭时被调用 
    sess_read($key); 
    这个函数在session处理程序读取指定session键值($key)时,检索并返回标识为$key的session数据.(注意:序列化是将变量或对象在程序结束或需要时保存在文件中,在下次程序运行或需要时再调入内存的技术,有别于只保存数据的方法。) 
    sess_write($key, $val); 
    这个函数据在session处理程序需要将数据保存时调用,这种情况经常在程序结束时发生。它负责将数据保存在下次能用sess_read($key)函数检索的地方。 
    sess_destroy($key); 
    这个函数在需要消毁session时。它负责删除session并且清除环境。 
    sess_gc($maxlifetime); 
    这个函数负责清理碎片。在这种情况下,它负责删除过时的session数据。session处理程序会偶尔调用它们。 
  定制程序可以用mysql数据库或DBM文件保存session数据,视具体的情况而定。如果使用mysql作支持,那还需要进行以下的步骤: 
  首先在mysql中创建一个sessions数据库,并且创建一个sessions表: 
  mysql> CREATE DATABASE sessions; 
  mysql> GRANT select, insert, update, delete ON sessions.* TO phpsession@localhost 
    -> IDENTIFIED BY 'phpsession'; 
  mysql> CREATE TABLE sessions ( 
    -> sesskey char(32) not null, 
    -> expiry int(11) unsigned not null, 
    -> value text not null, 
    -> PRIMARY KEY (sesskey) 
    -> ); 
  下一步,修改session_mysql.php文件的$SESS_DB* 变量使其匹配你机器上的数据库设置: 
<? 
$SESS_DBHOST = "localhost"; /* 数据库主机名 */ 
$SESS_DBNAME = "sessions"; /* 数据库名 */ 
$SESS_DBUSER = "phpsession"; /* 数据库用户名 */ 
$SESS_DBPASS = "phpsession"; /* 数据库密码 */ 
$SESS_DBH = ""; 
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); 
……//定制函数 
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc"); 
?> 
  定制使用dbm文件时的接口 : 
<? 
$SESS_DBM = ""; 
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime"); 
……//定制函数 
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc"); 
?> 
  session定制的测试代码: 
<?php 
…… 
if ($handler == "dbm") include("session_dbm.php");//使用何种接口 
elseif ($handler == "mysql") include("session_mysql.php"); 
else …… 
session_start(); 
session_register("count"); 
…… 
?> 
  在身分驗證中,如何應用Session?
  Session可用於使用者認證: 
  驗證使用者是否合法: 
    <? 
    〠/驗證過程中; session_register("reguser"); 
    ?> 
 在另一頁中檢查使用者是否登入
    <? 
    session_start(); 
    if(isset($user)&&$ user=""){/歡迎你如果已經愛的; 
    }else{//如果沒有登入
      echo "請先註冊!"; 
    } 
   『  session_destroy(); 
    …… 
    ?> 
  如何實現多session並發運作? 
  問題提出:我在為所在單位編寫一個進銷存系統中發現需要讓多個使用者可以同時進入一個php應用程式。原來設計的靜態的唯一的session ID導致資料混亂。這樣,動態產生一個唯一的session ID成為當務之急。 
  解決方法很簡單:我用了php檔案名稱+時間戳為唯一的session ID,這樣在我的程式中的每個session就各就各位,不再混亂了。 
  下面把我的原始碼公佈,方便也有同樣的問題的朋友多一個解決方法。
//Start a PHP session to preserve variables. 
  if ( empty($mysessionname) ) { 
     $micro = microtime(); out the blanks 
     $micro = str_replace(".","",$micro); // strip out the periods 
     〔$po_ "po_int" . mysessionname); 
  session_start(); 
程式註: 
  用mysessionname為頁間唯一的sessionname傳遞變量,如果你也用到這個名字必須把上述程式做個小小的改動。 Mysessionname不能為session的內部變數名,因為他在session開始之前就已經存在了。 Mysessionname也不能用cookie方式存放,因為多個session一定會覆寫原來的cookie檔。你可以用隱含表單的網域來保存它。這樣就不會出問題。





更多PHP中session使用方法詳解第2/2頁相關文章請關注PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
Memcached快取技術對於PHP中的Session處理的最佳化 Memcached快取技術對於PHP中的Session處理的最佳化 May 16, 2023 am 08:41 AM

Memcached是一種常用的快取技術,它可以讓Web應用程式的效能得到很大的提升。在PHP中,常用的Session處理方式是將Session檔案存放在伺服器的硬碟上。但是,這種方式並不是最優的,因為伺服器的硬碟會成為效能瓶頸之一。而使用Memcached快取技術可以對PHP中的Session處理進行最佳化,提升Web應用程式的效能。 PHP中的Session處

PHP Session 跨域與跨站請求偽造的比較分析 PHP Session 跨域與跨站請求偽造的比較分析 Oct 12, 2023 pm 12:58 PM

PHPSession跨域與跨站請求偽造的對比分析隨著網路的發展,Web應用程式的安全性顯得格外重要。在開發Web應用程式時,PHPSession是一種常用的身份驗證和會話追蹤機制,而跨域請求和跨站請求偽造(CSRF)則是兩種主要的安全威脅。為了保護使用者資料和應用程式的安全性,開發人員需要了解Session跨域和CSRF的區別,並採

解決 PHP Session 跨域問題的最佳實踐 解決 PHP Session 跨域問題的最佳實踐 Oct 12, 2023 pm 01:40 PM

解決PHPSession跨域問題的最佳實踐隨著互聯網的發展,前後端分離的開發模式越來越普遍。在這種模式下,前端與後端可能部署在不同的網域下,這就導致了跨域問題的出現​​。而在使用PHP的過程中,跨域問題也牽涉到Session的傳遞與管理。本文將介紹PHP中解決Session跨域問題的最佳實踐,並提供具體的程式碼範例。使用Cookie使用Coo

PHP Session 跨域的跨平台相容性處理 PHP Session 跨域的跨平台相容性處理 Oct 12, 2023 am 09:46 AM

PHPSession跨域的跨平台相容性處理隨著Web應用程式的發展,越來越多的開發者面臨跨域的問題。跨域是指在一個網域下的網頁去請求另一個網域下的資源,這在一定程度上增加了開發難度,特別是對於涉及到會話(Session)管理的應用程式來說,更是一個棘手的問題。本文將介紹如何在PHP中處理跨域的會話管理,並提供一些具體的程式碼範例。會話管理是We

分析 PHP Session 跨域的錯誤日誌處理 分析 PHP Session 跨域的錯誤日誌處理 Oct 12, 2023 pm 01:42 PM

PHPSession跨域錯誤日誌處理在開發Web應用程式時,我們經常使用PHP的Session功能來追蹤使用者的狀態。然而,在某些情況下,會出現跨域的錯誤,導致無法正確存取和操作Session資料。本文將介紹如何處理PHPSession跨域錯誤,並提供具體的程式碼範例。什麼是PHPSession跨域錯誤?跨域錯誤指的是瀏覽器中

PHP Session 跨域與跨站腳本攻擊的關係 PHP Session 跨域與跨站腳本攻擊的關係 Oct 12, 2023 pm 12:58 PM

PHPSession跨域與跨站腳本攻擊的關係隨著網路應用的廣泛應用,安全性問題也日益引起人們的關注。在開發網頁應用程式時,處理使用者會話(Session)是非常常見的一個需求。而PHP提供了一個方便的會話管理機制-Session。但是,Session也存在一些安全性問題,特別是與跨網域和跨站腳本攻擊相關的問題。跨域攻擊(Cross-Domain)是指透過一種網站

PHP Session 跨域與多層系統架構的適配性分析 PHP Session 跨域與多層系統架構的適配性分析 Oct 12, 2023 pm 02:34 PM

PHPSession跨域與多層系統架構的適配性分析隨著網際網路技術的發展,多層系統架構在Web應用程式中變得越來越常見。而在多層系統架構中,跨域存取是常見的需求。而PHP中的Session機制也是廣泛應用於Web應用程式中的身份驗證和資料共享等功能。本文將深入探討PHPSession在多層系統架構的跨域適配性,並提供具體的程式碼示

PHP Session 跨域的安全審計與漏洞挖掘 PHP Session 跨域的安全審計與漏洞挖掘 Oct 12, 2023 am 11:23 AM

PHPSession跨域的安全審計與漏洞挖掘摘要:隨著網際網路的發展,越來越多的網站開始使用PHPSession來管理使用者的登入狀態和資料。然而,由於PHPSession的特性,使得它存在一些安全風險,尤其是在跨域存取的情況下。本文將介紹PHPSession跨域安全審計的重要性,並提供一些具體的漏洞挖掘程式碼範例。一、引言PHPSession是一種在

See all articles