<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. php語言

    PHP中session 存儲方式的詳細介紹

    時間:2025-01-06 22:09:07 php語言 我要投稿
    • 相關推薦

    關于PHP中session 存儲方式的詳細介紹

      文章是對PHP中的session存儲方式進行了詳細的分析介紹,需要的朋友參考下.

      PHP為sesion的存儲提供了三種方式: 文件/ 內存/ 自定義存儲,默認是使用文件存儲.在訪問量大的網站上采用這種方式就不大合適,因為這樣會導致大量的輸入輸出的冗余.

      下面介紹一種基于Mysql數據庫的session存儲方式.

      首先要進行的配置如下:

      1>php.ini中將session.save_handler = files 中的files改為User,其他默認即可,重啟Apache(好像沒改也行啊)

      2>本實例創建的數據庫名叫php,    username: root        password:root

      本實例設計的數據庫的表結構如下所示:

      復制代碼 代碼如下:

      create table mysession(

      session_key char(32) not null,

      session_data text,

      session_expiry int(11),

      primary key(session_key)

      );

      第一列表示存儲session ID,第二列存儲session中的數據,第三列存儲有效期,呵呵(表結構就這么簡單)

      下面就是關鍵的那份自定義函數的實現session_set_save_handler(......)

      復制代碼 代碼如下:

      <?php

      function mysession_open($save_path, $session_name)

      {

      @mysql_connect("localhost", "root", "root")     //選擇數據庫之前需要先連接數據庫服務器

      or die("數據庫服務器連接失敗");

      @mysql_select_db("php")      //選擇數據庫mydb

      or die("數據庫不存在或不可用");

      return true;

      }

      function mysession_close()

      {

      return true;

      }

      function mysession_read($key)

      {

      @mysql_connect("localhost", "root", "root")     //選擇數據庫之前需要先連接數據庫服務器

      or die("數據庫服務器連接失敗");

      @mysql_select_db("php")      //選擇數據庫mydb

      or die("數據庫不存在或不可用");

      $expiry_time = time();       //獲取Session失效時間

      //執行SQL語句獲得Session的值

      $query = @mysql_query("select session_data from mysession "

      ."where session_key = '$key' and session_expiry > $expiry_time")

      or die("SQL語句執行失敗");

      if($row = mysql_fetch_array($query))

      return $row['session_data'];

      else

      return false;

      }

      function mysession_write($key, $data)

      {

      @mysql_connect("localhost", "root", "root")     //選擇數據庫之前需要先連接數據庫服務器

      or die("數據庫服務器連接失敗");

      @mysql_select_db("php")      //選擇數據庫mydb

      or die("數據庫不存在或不可用");

      $expiry_time = time() + 1200;       //獲取Session失效時間

      //查詢Session的鍵值是否已經存在

      $query = @mysql_query("select session_data from mysession "

      ."where session_key = '$key'")

      or die("SQL語句執行失敗");

      //如果不存在,則執行插入操作,否則執行更新操作

      if(mysql_numrows($query) == 0)

      {

      //執行SQL語句插入Session的值

      $query = @mysql_query("insert into mysession values('$key', '$data', $expiry_time)")

      or die("SQL語句執行失敗");

      }

      else

      {

      //執行SQL語句更新Session的值

      $query = @mysql_query("update mysession set "

      ."session_data = '$data', session_expiry = $expiry_time "

      ."where session_key = '$key'")

      or die("SQL語句執行失敗");

      }

      return $query;

      }

      function mysession_destroy($key)

      {

      @mysql_connect("localhost", "root", "root")     //選擇數據庫之前需要先連接數據庫服務器

      or die("數據庫服務器連接失敗");

      @mysql_select_db("php")      //選擇數據庫mydb

      or die("數據庫不存在或不可用");

      //執行SQL語句刪除Session

      $query = @mysql_query("delete from mysession where session_key = '$key'")

      or die("SQL語句執行失敗");

      return $query;

      }

      function mysession_gc($expiry_time)

      {

      @mysql_connect("localhost", "root", "root")     //選擇數據庫之前需要先連接數據庫服務器

      or die("數據庫服務器連接失敗");

      @mysql_select_db("php")      //選擇數據庫mydb

      or die("數據庫不存在或不可用");

      $expiry_time = time();

      //執行SQL語句刪除Session

      $query = @mysql_query("delete from mysession where session_expiry < $expiry_time")

      or die("SQL語句執行失敗");

      return $query;

      }

      //設置用戶自定義Session存儲

      session_set_save_handler('mysession_open',

      'mysession_close',

      'mysession_read',

      'mysession_write',

      'mysession_destroy',

      'mysession_gc');

      ?>

      最后面就是測試代碼

      1>存儲頁面 save.php

      復制代碼 代碼如下:

      <?php

      include('user-define-session-inc.php');   //包含session_set_save_handler定義的文件

      session_start();

      $_SESSION['username'] = "Simon";

      $_SESSION['password'] = "123456";

      ?>

      2. 顯示頁面 show.php

      復制代碼 代碼如下:

      <?php

      include('user-define-session-inc.php');   //包含session_set_save_handler定義的文件

      session_start();

      echo "UserName:".$_SESSION['username']."<BR>";

      echo "PassWord:".$_SESSION['password']."<BR>";

      ?>

    【PHP中session 存儲方式的詳細介紹】相關文章:

    php中Session存儲到Redis的方法05-01

    php實現Session存儲到Redis02-15

    Session在PHP中的使用07-24

    PHP用Redis替代文件存儲Session的方法01-25

    如何使用php中session04-01

    php中session的基礎知識04-02

    PHP中session使用方法詳解03-03

    教你如何使用php的session07-13

    php語言中session用法07-02

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人