1. 程式人生 > >php session 儲存資料庫

php session 儲存資料庫

session 儲存資料庫

  • 在伺服器上,所有的網站都在使用同樣的臨時目錄,就意味著多個程式在同一個位置進行檔案的讀取操作,那麼我們可以利用技術編寫一個程式來讀取臨時目錄所有的資料,顯然這樣就有很大的安全隱患。如果有多臺伺服器,那麼共享資訊就很困難了。
  • 有時候我們需要長期儲存SESSION資料,將SESSION快取儲存在臨時檔案就不可取了,而且隨著SESSION的增多,也會增加伺服器的負擔,對伺服器效能優化是很不利的。
  • 而解決SESSION的問題最好的方案無非就是利用PHP將SESSION會話儲存到資料庫,作為獨立網站的 SESSION 會話狀態,和其它網站的臨時目錄會話分隔開,不僅安全性會提高許多,而且也提高程式的規範性,使得網站的 SESSION 會話能夠統一進行管理操作。

一、PHP 寫一個會話類:sessionmysql.class.php

/*******************************************
 * 檔名: sessionmysql.class.php
 * 功能:     session儲存資料庫處理類--儲存資料庫方式為EasyDB
 * EasyDB的使用請參考 http://www.oschina.net/p/easydb?from=mail-notify
 * 版本:      1.0
 * 日期:     2016-06-08
 * 作者:      JoeXiong
 * 版權:      [email protected]
github.com/JoeXiong Inc All Rights Reserved *********************************************/
class session { private $_lifetime; private $_db; private $_table; private $_userid; private $_domain = _COOKIE_DOMAIN_; // Cookie 作用域(.joeshop.cn) /** * 初始化 * * @param unknown $etdbhandler * @param
number $lifetime * @param number $userid */
function __construct($etdbhandler, $lifetime = 1440, $userid = 0) { $this->_table = 'joe_sessions';//表名 $domain = $this->_domain; ini_set('session.cookie_domain', "$domain"); // session 跨域 $this->_db = $etdbhandler; $this->_lifetime = $lifetime; $this->_userid = $userid; @ini_set('session.save_handler', 'user'); // 改變session處理機制為使用者自定義 $flag = session_set_save_handler( array(&$this,'open'), array(&$this,'close'), array(&$this,'read'), array(&$this,'write'), array(&$this,'destroy'), array(&$this,'gc') ); if (! session_id()) { session_start(); } } function open($save_path, $session_name) { return true; } function close() { return true; } function read($id) { $sql = "SELECT SessionData FROM $this->_table WHERE SessionId=:id"; $array = array( ':id' => $id ); $result = $this->_db->queryOne($sql, $array); } function write($id, $data) { // funcPunlic::getIp() 獲取提交者的IP $ip = addslashes(funcPunlic::getIp()); $data = addslashes($data); if (strlen($data) > 500) $data = ''; $times = time(); $etimes = $times + $this->_lifetime; // $data中的鍵為資料庫欄位名,值為對應的數值 $data = array( 'SessionId' => "$id", 'UserId' => $this->_userid, 'Ip' => "$ip", 'LastVisit' => "$times", 'Expiration' => "$etimes", 'SessionData' => "$data", ); return $this->_db->insert($this->_table, $data); } function destroy($id) { $where = array( 'SessionId' => "$id", ); return $this->_db->delete($this->_table, $where); } function gc($maxlifetime) { $times = time(); $where = array( 'Expiration' => "Expiration<$times", ); return $this->_db->delete($this->_table,$where); } }

二、資料庫設計

CREATE TABLE `joe_sessions` (
  `SessionId` varchar(32) NOT NULL,
  `UserId` int(10) unsigned NOT NULL DEFAULT '0',
  `Ip` varchar(100) DEFAULT NULL,
  `LastVisit` int(10) unsigned NOT NULL DEFAULT '0',
  `Expiration` int(10) unsigned NOT NULL DEFAULT '0',
  `SessionData` varchar(500) NOT NULL,
  PRIMARY KEY (`SessionId`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COMMENT='session表';

相關推薦

php session 儲存資料庫

session 儲存資料庫 在伺服器上,所有的網站都在使用同樣的臨時目錄,就意味著多個程式在同一個位置進行檔案的讀取操作,那麼我們可以利用技術編寫一個程式來讀取臨時目錄所有的資料,顯然這樣就有很大的

php session儲存到檔案、memcache或redis

儲存在檔案 修改php.ini session.save_handler = files session.save_path = “/home/logs/session” 或者在php程式碼中 ini_set(“session.save_handler

Java儲存資料庫中時間戳和php操作資料庫時間戳的關係

一直困擾我的問題,終於得到了解決!原先以為是自己系統問題(其實也可以確定自己的系統是64位),於是利用一下程式碼測試自己的系統是不是有問題,得到的結果是沒問題的,但是就是無正確結果輸出。於是解決問題途徑是在strtotime()函式和date(format,time())函式之間徘徊。

phpsession儲存使用者資訊

<?php session_start(); //假設使用者登入成功獲得了以下使用者資料 $userinfo = array(     'uid'  => 10000,     'name' => 'spark',     'email' => '[

php session存入redis

ice local ons o-c php5 hat phpredis 需要 path 一、 安裝phpredis擴展php連接redis需要安裝phpredis擴展。下載地址:https://github.com/phpredis/phpredis/releases,選用

php session 保存到redis 實現session的共享

.com 技術 src cnblogs logs png images 9.png p s 1.redis安裝肯定都會了,就不介紹了。 2.核心代碼 php session 保存到redis 實現session的共享

php session機制與cookie機制以及聯系與區別

標識 級別 聯系 是什麽 生命周期 技術 路徑 多次 瀏覽器中 session與cookie是在做項目中很常用的會話技術,session與cookie也是面試中被問到頻率最高的問題,有一次我去面試,面試官就懟著我session與cookie一直問(頭都大了),下面總結了一些

php session cookie

csdn blank 請求 找到 ref ice ssi 內容 瀏覽器 php的session是保存在服務器,cookie保存在客戶端瀏覽器,兩個是通過PHPSESSID(默認,可修改)關系起來,帶有PHPSESSID的cookie請求服務器時,服務器在php的sessio

php session 會話保存到redis

hand 計算機 close gpo pat div 優化 io讀寫 鎖定 php的session會話默認時以文件形式保存在php.ini配置文件設置的會話緩存目錄,文件保存會話的效率很低,每當每個用戶登錄一次就會在服務器上生成一個唯一的session_id文件,當用戶登錄

php session實現原理分析

keep enc accep referer zip image time -s accept http://www.jb51.net/article/77726.htm 第一次會話時會有Set-Cookie響應頭返回,設置上PHPSESSID cookie Cache

php session 存儲到redis

.com php-fpm handler functions fpm redis onf ble conf PHP 的會話默認是以文件的形式存在的,可以配置到 NoSQL 中,即提高了訪問速度,又能很好地實現會話共享,,,爽歪歪! 配置方式如下: 方法一:修改 php.i

PHP session

生命周期 二進制 會話 生成 順序 emca 默認 資源 保險 /* 【session】 */1. 開啟session機制 session_start() 註意:session_start()函數前不能有輸出!除非開啟ob緩存。2. 操作數據 對$_SES

php session的用法

start xxxx xxxxx ros echo 北京 調用 輸出 session 初始 Session: session_start()。 存儲 Session 變量:$_SESSION[‘name‘]=‘快聘100‘; 調用Session:$name =

php session

數據庫對象 handle ram 垃圾回收 fun ray () art exp <?php error_reporting(E_ERROR); class SessionDeal{ private $database; /* session

PHP 連線mysql資料庫

報錯: Warning: mysqli::mysqli(): (HY000/2002): No such file or directory <span style="font-size:18px;">cd /var sudo mkdir m

cookie和session儲存資料

cookie 儲存資料到瀏覽器 Cookie cookie = new Cookie("key", "value"); cookie.setMaxAge(3600); // 預設隨著瀏覽器關閉刪除 response.addCookie(cookie);

php將從資料庫取出的資料分為6個一組的二維陣列

$presell = M('presell')->field('id,sname,num,weight,shop_price,endtime,supply,givetime')->where($info)->order('id desc')->select(); &nbs

PHP Session的過期機制

<?php // 會話開始 session_start(); // 設定會話的有效期 $expireAfter = 30; // 檢查會話的最後動作時間是否設定 if (isset($_SESSION['last_action'])) { // 從最後動作時間到目前的時間長度

session儲存token,來避免post重複提交

第一步,在頁面調取前,生成隨機數token   $this->session->set_userdata("token", md5(microtime(true)));   第二步,在頁面表單裡,增加一個hidden的input用來提交token   <input 

使用php語句將資料庫*.sql檔案匯入資料庫

最簡單的php語句把資料庫*.sql檔案匯入資料庫  複製程式碼 程式碼如下: $sql=file_get_contents("text.sql"); //把SQL語句以字串讀入$sql  $a=explode(";",$sql); //用explode()函