آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

افزایش ماندگاری سیشن

سجاد  4 سال پیش  4 سال پیش
+1 0

سلام دوستان من می خوام دو هفته  سیشن هام ماندگاری داشته باشند باید چکار کنم ؟

 برای این سوال 2 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
libcode  4 سال پیش
+1 0

اول از همه باید آخرین باری که کاربر درخواستی را ثبت کرده است ذخیره کنید. (به ازای هر درخواست باید ثبت شود)

<?php
  $_SESSION['timeout'] = time();
?>

و دفعه ی بعدی که درخواستی را ثبت میکند چقدر زمان نسبت به آخرین بار گذشته در این مثال حدوداً 1 روز است. برای یک هفته کافی است 24 * 7 را قرار دهید.

<?php
  if (($_SESSION['timeout'] + (24 * 60 * 60)) < time()) {
     // session timed out
  } else {
     // session ok
  }
?>
+1 0
ببین سیشن من تو هاست یک روزه باطل میشه اگر طرف دو روز دیگه بیاد تو سایت متغیر timeout اصلانیست که بخوام چکش کنم :( (4 سال پیش)
+1 0
خب توی دیتابیس همراه با id باید ذخیره بشه چون باید بمونه و هیچ وقت هم destroy نشه. مگر موقعی که کاربر بخواد اکانتش رو حذف کنه(مثلاً). پس timeout ی که مال session هست رو باید به دیتابیس منتقل کنید و به ازای هر درخواست یک بار این تایم آپدیت بشه که برای سایتی که کاربران زیادی دارد غیر منطقی هست ، پس باید به فکر راه حل دیگری باشید اگر ممکن هست اطلاعات بیشتری در مورد کاری که میخواهید انجام دهید ارائه دهید تا بهتر کمکتان کنم. (منظورم این هست که برای چه میخواهید session را نگه داری کنید.) (4 سال پیش)
+1 0
من کاربر لاگین می کنه می خوام user_id و username اون رو تا دو هفته بمونه و هر بار وارد سایت می شه لاگین نکنه (4 سال پیش)
+1 0
خب چرا از اول نگفتین منظورتون همون گزینه ی (من رو به خاطر بسپار) هست. باید از کوکی استفاده کنید. (4 سال پیش)
پاسخ به سوال 
libcode  4 سال پیش
+1 0

 پاسخ صحیح

اول از همه باید در داخل فرم لاگین این گزینه ها باشند.

<form action="" method="post" id="frmLogin">
    <div class="error-message"><?php if(isset($message)) { echo $message; } ?></div>
    <div class="field-group">
        <div>
            <label for="login">Username</label>
        </div>
        <div>
            <input name="member_name" type="text"
                value="<?php if(isset($_COOKIE["member_login"])) { echo $_COOKIE["member_login"]; } ?>"
                class="input-field">
        </div>
    </div>
    <div class="field-group">
        <div>
            <label for="password">Password</label>
        </div>
        <div>
            <input name="member_password" type="password"
                value="<?php if(isset($_COOKIE["member_password"])) { echo $_COOKIE["member_password"]; } ?>"
                class="input-field">
        </div>
    </div>
    <div class="field-group">
        <div>
            <input type="checkbox" name="remember" id="remember"
                <?php if(isset($_COOKIE["member_login"])) { ?> checked
                <?php } ?> /> <label for="remember-me">Remember me</label>
        </div>
    </div>
    <div class="field-group">
        <div>
            <input type="submit" name="login" value="Login"
                class="form-submit-button"></span>
        </div>
    </div>
</form>

و بعد هم از این کد ها برای کوکی استفاده کنید.

<?php
session_start();

require_once "Auth.php";
require_once "Util.php";

$auth = new Auth();
$db_handle = new DBController();
$util = new Util();

require_once "authCookieSessionValidate.php";

if ($isLoggedIn) {
    $util->redirect("dashboard.php");
}

if (! empty($_POST["login"])) {
    $isAuthenticated = false;
    
    $username = $_POST["member_name"];
    $password = $_POST["member_password"];
    
    $user = $auth->getMemberByUsername($username);
    if (password_verify($password, $user[0]["member_password"])) {
        $isAuthenticated = true;
    }
    
    if ($isAuthenticated) {
        $_SESSION["member_id"] = $user[0]["member_id"];
        
        // Set Auth Cookies if 'Remember Me' checked
        if (! empty($_POST["remember"])) {
            setcookie("member_login", $username, $cookie_expiration_time);
            
            $random_password = $util->getToken(16);
            setcookie("random_password", $random_password, $cookie_expiration_time);
            
            $random_selector = $util->getToken(32);
            setcookie("random_selector", $random_selector, $cookie_expiration_time);
            
            $random_password_hash = password_hash($random_password, PASSWORD_DEFAULT);
            $random_selector_hash = password_hash($random_selector, PASSWORD_DEFAULT);
            
            $expiry_date = date("Y-m-d H:i:s", $cookie_expiration_time);
            
            // mark existing token as expired
            $userToken = $auth->getTokenByUsername($username, 0);
            if (! empty($userToken[0]["id"])) {
                $auth->markAsExpired($userToken[0]["id"]);
            }
            // Insert new token
            $auth->insertToken($username, $random_password_hash, $random_selector_hash, $expiry_date);
        } else {
            $util->clearAuthCookie();
        }
        $util->redirect("dashboard.php");
    } else {
        $message = "Invalid Login";
    }
}
?>

برای logout هم از این کد ها استفاده کنید.

<?php
session_start();

require "Util.php";
$util = new Util();

//Clear Session
$_SESSION["member_id"] = "";
session_destroy();

// clear cookies
$util->clearAuthCookie();

header("Location: ./");
?>

اگر هر نوع سوالی هم داشتید حتماً بپرسید. امیدوارم بدردتون خورده باشه.

+1 0
مرسی ولی داخل سایت پرداخت اینترنتی و اینا دارم و کاربرای زیادی با اطلاعات زیاد از خودشون در سایت ثبت می کنند از نظر امنیت مشکلی نداره؟ (4 سال پیش)
+1 0
خیر فقط ممکنه کاربر هک بشه و از طریق اون کوکی هاش رو بدست بیارن و به حساب کاربریش وصل شن و حسابی خرابکاری بار بیارن و این مشکل از طرف شما نخواهد بود باید کاربران هم به فکر امنیت حساب های خود باشند برای همین در موقع ثبت نام میتوانید یک الگوریتم قرار دهید که کاربر از هر کاراکتری که باعث قوی تر شدن رمز میشه استفاده کنه (به عنوان مثال (هر چند encrypt هم بشه باز هم بهتره که این الگوریتم توسط جاوا اسکریپت نوشته بشه.))هیچ چیز واضحی قرار ندهید که هکر ها بتوانند از آن سوء استفاده کنند برای همین دیتا های مهم باید encrypt و یا encode بشن که کسی نتونه اون اطلاعات رو بخونه. تا حد امکان encrypt کنید حتی اگه شده یک الگوریتم خاص برای اطلاعات خام در نظر بگیرید. که داخل کوکی اون اطلاعات دزدیده نشه. چون سایت های دیگر هم اگر به کوکی های همون کاربر دسترسی پیدا کنند ممکنه برای شما تهدید به حساب بیاد برای همین بهتر هست که همیشه مرورگر را بروز نگه دارید همه ی ما باید مراقب باشیم. پس به کاربران هم اطلاع دهید که مرورگر خود را بروز نگه دارند. (4 سال پیش)
+1 0
یک گزینه ی دیگر هم هست که به همه پیشنهاد میکنم هم به شما و هم به همه ی کاربرها شما هم پیشنهاد دهید . بهتر هست در داخل مرورگر که یک گزینه داره به اسم master password اون رو فعال کنید. امنیت بیشتری رو فراهم میکنه و البته اگه از یک رمز قوی استفاده کنید خیلی خوبه. در ضمن سعی کنید به کاربرانتون هشدار دهید که شماره حساب با رمز بانکی خود را هرگز داخل مرورگر ذخیره نکنند. اینگونه بهتر هست. (4 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .