reza303
شنبه 17 اسفند 1392, 01:53 صبح
سلام .
پ.ن : امروز یه چی یاد گرفتم گفتم شیر کنم برا دوستان بقیه هم استفاده کنند .
دوستان همون طور که می دونید برا ذخیره یه اطلاعات خاصی ما از کوکی یا سیشن استفاده می کنیم . خب کوکی که کلا خدا رحمتش کنه امنیتش صفره ! و سیشن هم میشه دزدیدش :متعجب:
برا این کار میشه شما سیشن ها رو داخل دیتابیس ذخیره کنید .
خب از روش pdo برا اتصال به دیتابیس که هم امن تر هست و هم سریع تر استفاده کردیم .
قدم اول : فایل دیتابیس ما : db.php .
قدم دوم : ساخت فایل session.php .
ذخیره اطلاعات زیر داخلش :
<?php
abstract class PDOSession
{
private static $connect;
private static $oldData;
/**
* روش اتصال : Pdo .
*/
public static function init(PDO $connect)
{
self::$connect = $connect;
// اضافه کردن سیشن با تنظیمات مربوطه
session_set_save_handler('PDOSession::open', 'PDOSession::close',
'PDOSession::read', 'PDOSession::write',
'PDOSession::destroy', 'PDOSession::garbageCollect');
session_start();
}
/**
* باز کردن و پاچ کردن سیشن
*/
public static function open($save_path, $session_name)
{
// بر گردوندن سیشن
return true;
}
/**
* بستن سیشن
*/
public static function close()
{
return true;
}
/**
* ساخت آی دی سیشن و بار کردن آن
*/
public static function read($session_id)
{
// لود دیتابیس به روش پارام
$query = self::$connect->prepare('
SELECT data
FROM sessions
WHERE session_id = :session_id');
$query->execute(array(':session_id' => $session_id));
return $query->fetchColumn();
}
/**
* ذخیره کردن سیشن
*/
public static function write($session_id, $data)
{
// فراخانی دیتابیس و اپدیت سیشن ذخیره شده در دیتابیس
$query = self::$connect->prepare('
UPDATE sessions
SET data = :data, last_activity = :last_activity
WHERE session_id = :session_id');
$query->execute(array(
':session_id' => $session_id,
':data' => $data,
'last_activity' => time()));
// اگه آپدیت نشد بهش می گیم مجدد یکی بساز
if ($query->rowCount() == 0)
{
self::$connect
->prepare('
INSERT INTO sessions
(session_id, data, last_activity)
VALUES
(:session_id, :data, :last_activity)')
->execute(array(
':session_id' => $session_id,
':data' => $data,
'last_activity' => time())
);
}
}
/**
* حذف سیشن
*/
public static function destroy($session_id)
{
self::$connect
->prepare('
DELETE FROM sessions
WHERE session_id = :session_id')
->execute(array(':session_id' => $session_id));
}
/**
* تنظیمات مربوط به مدت زمان سیشن .
* اپر کاربر 24 دقیقه هیچ کاری با سیشن نکرد سیشن پاک میشه از رو جدول .
*/
public static function garbageCollect($lifetime)
{
self::$connect
->prepare('
DELETE FROM sessions
WHERE last_activity < :min_time')
->execute(array(':min_time' => time() - $lifetime));
}
}
?>
= > مشخصات دیتابیس رو در فایل بالا وارد می کنیم .
قدم سوم : مرتب سازی و فراخانی سیشن جهت استفاده
برا اینکه مرتب باشه کارمون و اینکه نخواییم هی دستور فراخانی فایل بالا و ... رو بزنیم می یایم فایل include رو می سازیم :
و داخلش می گیم :
<?php
require 'session.php';
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
PDOSession::init($connect);
?>
قدم چهارم : ساخت جدول
برا این کار کافیه دستورات زیر رو داخل phpmyadmin بزنید :
CREATE TABLE IF NOT EXISTS `sessions` (
`session_id` varchar(40) COLLATE utf8_bin NOT NULL,
`data` text COLLATE utf8_bin NOT NULL,
`last_activity` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
خب حالا وقتشه نتیجه کارمون رو بگیریم :
قدم پنجم : شما کافیه فایل include.php رو هر جا نیاز هست سیشن ساخته بشه و یا سیشن بارگزاری بشه و ازش استفاده بشه اینلود کنید :
مثلا :
include 'db.php';
include 'include.php';
* اول دیتابیس رو فراخانی می کنیم بعد هم اینکلود رو .
قدم ششم : حذف سیشن .
برا حذف ( موقعی که کاربر دکمه خروج رو می زنه و وارد logout.php میشه )
برا همین منظور کافیه دستورات زیر رو داخل logout.php قرار بدین )
<?php
include 'db.php';
include 'include.php';
session_destroy();
header("location:login.php");
?>
خب امید وارم مفید واقع بوده باشه .
دوستان و اساتید لطفا آموزش رو کامل کنند .
پ.ن : امروز یه چی یاد گرفتم گفتم شیر کنم برا دوستان بقیه هم استفاده کنند .
دوستان همون طور که می دونید برا ذخیره یه اطلاعات خاصی ما از کوکی یا سیشن استفاده می کنیم . خب کوکی که کلا خدا رحمتش کنه امنیتش صفره ! و سیشن هم میشه دزدیدش :متعجب:
برا این کار میشه شما سیشن ها رو داخل دیتابیس ذخیره کنید .
خب از روش pdo برا اتصال به دیتابیس که هم امن تر هست و هم سریع تر استفاده کردیم .
قدم اول : فایل دیتابیس ما : db.php .
قدم دوم : ساخت فایل session.php .
ذخیره اطلاعات زیر داخلش :
<?php
abstract class PDOSession
{
private static $connect;
private static $oldData;
/**
* روش اتصال : Pdo .
*/
public static function init(PDO $connect)
{
self::$connect = $connect;
// اضافه کردن سیشن با تنظیمات مربوطه
session_set_save_handler('PDOSession::open', 'PDOSession::close',
'PDOSession::read', 'PDOSession::write',
'PDOSession::destroy', 'PDOSession::garbageCollect');
session_start();
}
/**
* باز کردن و پاچ کردن سیشن
*/
public static function open($save_path, $session_name)
{
// بر گردوندن سیشن
return true;
}
/**
* بستن سیشن
*/
public static function close()
{
return true;
}
/**
* ساخت آی دی سیشن و بار کردن آن
*/
public static function read($session_id)
{
// لود دیتابیس به روش پارام
$query = self::$connect->prepare('
SELECT data
FROM sessions
WHERE session_id = :session_id');
$query->execute(array(':session_id' => $session_id));
return $query->fetchColumn();
}
/**
* ذخیره کردن سیشن
*/
public static function write($session_id, $data)
{
// فراخانی دیتابیس و اپدیت سیشن ذخیره شده در دیتابیس
$query = self::$connect->prepare('
UPDATE sessions
SET data = :data, last_activity = :last_activity
WHERE session_id = :session_id');
$query->execute(array(
':session_id' => $session_id,
':data' => $data,
'last_activity' => time()));
// اگه آپدیت نشد بهش می گیم مجدد یکی بساز
if ($query->rowCount() == 0)
{
self::$connect
->prepare('
INSERT INTO sessions
(session_id, data, last_activity)
VALUES
(:session_id, :data, :last_activity)')
->execute(array(
':session_id' => $session_id,
':data' => $data,
'last_activity' => time())
);
}
}
/**
* حذف سیشن
*/
public static function destroy($session_id)
{
self::$connect
->prepare('
DELETE FROM sessions
WHERE session_id = :session_id')
->execute(array(':session_id' => $session_id));
}
/**
* تنظیمات مربوط به مدت زمان سیشن .
* اپر کاربر 24 دقیقه هیچ کاری با سیشن نکرد سیشن پاک میشه از رو جدول .
*/
public static function garbageCollect($lifetime)
{
self::$connect
->prepare('
DELETE FROM sessions
WHERE last_activity < :min_time')
->execute(array(':min_time' => time() - $lifetime));
}
}
?>
= > مشخصات دیتابیس رو در فایل بالا وارد می کنیم .
قدم سوم : مرتب سازی و فراخانی سیشن جهت استفاده
برا اینکه مرتب باشه کارمون و اینکه نخواییم هی دستور فراخانی فایل بالا و ... رو بزنیم می یایم فایل include رو می سازیم :
و داخلش می گیم :
<?php
require 'session.php';
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
PDOSession::init($connect);
?>
قدم چهارم : ساخت جدول
برا این کار کافیه دستورات زیر رو داخل phpmyadmin بزنید :
CREATE TABLE IF NOT EXISTS `sessions` (
`session_id` varchar(40) COLLATE utf8_bin NOT NULL,
`data` text COLLATE utf8_bin NOT NULL,
`last_activity` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
خب حالا وقتشه نتیجه کارمون رو بگیریم :
قدم پنجم : شما کافیه فایل include.php رو هر جا نیاز هست سیشن ساخته بشه و یا سیشن بارگزاری بشه و ازش استفاده بشه اینلود کنید :
مثلا :
include 'db.php';
include 'include.php';
* اول دیتابیس رو فراخانی می کنیم بعد هم اینکلود رو .
قدم ششم : حذف سیشن .
برا حذف ( موقعی که کاربر دکمه خروج رو می زنه و وارد logout.php میشه )
برا همین منظور کافیه دستورات زیر رو داخل logout.php قرار بدین )
<?php
include 'db.php';
include 'include.php';
session_destroy();
header("location:login.php");
?>
خب امید وارم مفید واقع بوده باشه .
دوستان و اساتید لطفا آموزش رو کامل کنند .