PHPのSessionオブジェクトの使用方法

7177 ワード

PHP開発では,セッションはCookieよりもサーバ側に格納されたセッションであり,比較的安全であり,Cookieのように格納長の制限はない.次はSessionの紹介です.
phpのSessionとCookie
PHP開発ではCookieよりもsessionはサーバ側に格納されたセッションであり,比較的安全であり,Cookieのように格納長制限がないため,本稿ではsessionの使用について簡単に紹介する.
Sessionはサーバ側にテキストファイルとして格納されるため,クライアントがSessionコンテンツを変更することを恐れない.実際にサーバ側のSessionファイルではPHPが自動的にsessionファイルを修正する権限があり、システムの読み取りと書き込みの権限しか残っておらず、ftpでは修正できないので、ずっと安全です.
Cookieの場合、ユーザーがログインしているかどうかを検証するには、md 5暗号化後の文字列である可能性のあるユーザー名とパスワードをCookieに保存し、ページを要求するたびに検証する必要があります.ユーザー名とパスワードがデータベースに格納されている場合は、毎回データベース・クエリーを実行し、データベースに余分な負担をかけます.一度だけ検証するわけにはいかないからです.どうしてですか.クライアントCookieの情報は修正される可能性があるからです.もしあなたが$admin変数を保存してユーザーがログインしているかどうかを示し、$adminがtrueの場合はログインを示し、falseの場合はログインしていないことを示し、初めて検証に合格した後に$adminをtrueに等しくクッキーに保存し、次回は検証しなくてもいいのではないでしょうか.間違っています.もし誰かがtrueの$admin変数を偽造したら、すぐに管理権限を取ったのではないでしょうか.とても安全ではありません.
Sessionは違います.Sessionはサーバ側に格納されています.リモートユーザーはsessionファイルの内容を変更できません.そのため、$admin変数を単純に格納してログインするかどうかを判断することができます.初回検証で$admin値をtrueに設定し、その後、その値がtrueであるかどうかを判断します.そうでなければ、ログインインタフェースに移行します.これにより、多くのデータベース操作を削減できます.また、クッキーを検証するためにパスワードを渡すたびの不安全性を減らすことができます(session検証は、SSLセキュリティプロトコルを使用していない場合は、一度だけ渡す必要があります).パスワードがmd 5暗号化されていても、容易にキャプチャされます.
もちろんsessionを使用するには、制御が容易で、ユーザーによってストレージをカスタマイズできるなど、多くの利点があります(データベースに格納されます).私はここであまり言わない.
セッションはphp.iniは設定する必要がありますか?誰もがPHPを修正しているわけではないので、一般的には必要ありません.iniの権限、デフォルトsessionの保存経路はサーバーのシステム一時フォルダで、私たちは自分のフォルダに保存することができます.これは後で紹介します.
PhpがSessionを作成する方法
セッションの作成方法について説明します.とても簡単で、本当です.
セッションセッションを開始し、$admin変数を作成します.

//    session session_start(); 
//        admin    ,    。 
$_session["admin"] = null; 
?>   

Sessionを使用している場合、またはPHPファイルがSession変数を呼び出す場合は、Sessionを呼び出す前にsession_を使用して起動する必要があります.start()関数.その他はあなたが設定する必要はありません.PHPは自動的にセッションファイルの作成を完了します.
このプログラムを実行したら、システムの一時フォルダにこのセッションファイルを見つけることができます.一般的なファイル名はsess_のようです.4 c 83638 b 3 b 0 dbf 65583181 c 2 f 89168 ec、32ビット符号化後のランダム文字列.エディタで開き、内容を確認します.

admin|N; 

一般的なコンテンツ構造:
変数名|タイプ:長さ:値;
各変数をセミコロンで区切ります.長さやタイプなど省略できるものもあります.
認証プログラムを見てみましょう.データベースにはユーザー名とmd 5暗号化されたパスワードが格納されています.

//      ...   
$posts = $_POST; 
//          
foreach ($posts as $key => $value) 
{ 
$posts[$key] = trim($value); 
} 
$password = md5($posts["password"]); 
$username = $posts["username"]; 
$query = "SELECT `username` FROM `user` WHERE `password` = '$password'"; 
//        
$userInfo = $DB->getRow($query); 
if (!emptyempty($userInfo)) 
{ 
if ($userInfo["username"] == $username) 
{ 
//       ,   session 
session_start(); 
//         admin   ,    true 
$_SESSION["admin"] = true; 
} 
else 
{ 
die("       "); 
} 
} 
else 
{ 
die("       "); 
} 

ユーザー検証が必要なページでセッションを開始し、ログインするかどうかを判断します.

//              
$admin = false; 
//     ,       
session_start(); 
//        
if (isset($_SESSION["admin"]) && $_SESSION["admin"] == true) 
{ 
echo "       "; 
} 
else 
{ 
//     ,  $_session["admin"]    false 
$_SESSION["admin"] = false; 
die("     "); 
} 
?> 

簡単ではないでしょうか.$sessionはサーバ側に格納された配列と見なせばよいが,我々が登録した各変数は配列のキーであり,配列の使用と何の違いもない.
システムを登録するにはどうすればいいですか?セッションを破棄すればいいです.

 

SessionはCookieのように生存周期を設定できますか?SessionがあればCookieを完全に捨てるのではないでしょうか.Cookieと組み合わせてセッションを使うのが一番便利だと言いたいです.
Sessionはどのようにクライアントユーザーを判断しますか?Session IDによって判断され、Session IDとは何か、そのSessionファイルのファイル名であり、Session IDはランダムに生成されるので、一意性とランダム性を保証し、Sessionの安全を確保することができる.一般にセッションの生存期間が設定されていない場合、セッションIDはメモリに格納され、ブラウザを閉じると自動的にログアウトし、ページを再要求した後、セッションIDを再登録します.
クライアントがCookieを無効にしていない場合、Cookieはセッションセッションを開始するときにセッションIDとセッションの生存期間を格納する役割を果たします.セッションの生存期間を手動で設定します.

session_start(); 
//      
$lifeTime = 24 * 3600; 
setcookie(session_name(), session_id(), time() + $lifeTime, "/"); 
?>  

実はSessionは関数sessionを提供しています.set_cookie_params(); Sessionの生存期間を設定するには、session_start()関数呼び出しの前に呼び出す:

//      
   

クライアントがIE 6.0を使用する場合、セッション_set_cookie_params(); 関数設定Cookieに問題があるので、setcookie関数を手動で呼び出してcookieを作成します.
クライアントがCookieを無効にしたらどうしますか?仕方なく、すべてのライフサイクルはブラウザプロセスであり、ブラウザを閉じるだけで、ページを再要求してセッションを再登録しなければなりません.では、セシオンIDはどうやって伝えますか?URLまたは非表示フォームで渡すと、PHPは自動的にセッションIDをURLに送信します.URLは次のようになります.http://www.openphp .cn/index.php?PHPSESSID=bba 5 b 2 a 240 a 77 e 5 b 44 cfa 01 d 49 cf 9669、URLの中のパラメータPHPSESSIDはSession IDで、私達は$_を使うことができますGETはこの値を取得し、セッションIDページ間転送を実現する.

//      
 

仮想ホストでは、すべてのユーザーのSessionをシステムの一時フォルダに保存すると、メンテナンスが困難になり、セキュリティが低下します.Sessionファイルの保存パスを手動で設定できます.session_save_path()はこのような機能を提供している.セッション格納ディレクトリは、Webアクセスができないフォルダを指すことができます.もちろん、読み取り/書き込み属性が必要です.

   

同session_set_cookie_params(); 関数は同じです.session_save_path()関数もsession_でなければなりませんstart()関数呼び出しの前に呼び出されます.配列、オブジェクトをsessionに格納することもできます.操作配列は操作一般変数と変わらないが,オブジェクトを保存するとPHPは自動的にオブジェクトをシーケンス化(シリアル化とも呼ばれる)してセッションに保存する.次の例では、この点を説明します.

age; 
} 
function setAge($age) { 
$this->age = $age; 
} 
} 
?> 
setage.PHP 
setAge(21); 
$_session['person'] = $person; 
echo "check here to output age"; 
?> 
output.PHP 
output(); 
?> 

setageを実行するとphpファイルの場合、setage()メソッドが呼び出され、年齢21が設定され、その状態をシーケンス化してセッションに保存する(PHPは自動的にこの変換を完了する)、outputに移動する.php後、この値を出力するには、さっき保存したオブジェクトを逆シーケンス化しなければならないし、シーケンス化を解くときに未定義クラスをインスタンス化する必要があるため、後でコールバック関数を定義し、personを自動的に含む.PHPというクラスファイルは,オブジェクトが再構築され,現在のageの値が21であることを取得し,output()メソッドを呼び出して出力する.
ここまで、SessionがPHPでどのように使うかを紹介しましたので、あなたの勉強に役立つことを願っています.