تالار گفتمان nCIS.ir

نسخه‌ی کامل: ایجاد رشته توکن
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
با تابع زیر یه رشته تصادفی ایجاد  میکنم و با کوکی این رشته را تا یه زمان مثلا 10 ثانیه حفظ میکنم حالا میخوام وقتی صفحه ریفرش شد زمان انقضای کوکی ریست بشه و مثلا بشه همون ده ثانیه اول که ست کردیم 
function token($length = 40){
    $cookie_name = "token_set";
   if(isset($_COOKIE[$cookie_name]) && $_COOKIE[$cookie_name] != "") {
       $token = $_COOKIE[$cookie_name];
   }
   else
   {
       $character = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
       $token = "";
       $num_valid_chars = strlen($character);
       for ($i = 0; $i < $length; $i++)
       {
           $random_pick = mt_rand(1, $num_valid_chars);
           $random_char = $character[$random_pick-1];
           $token .= $random_char;
       }

       setcookie($cookie_name, $token, time() + (10), '/');   //set for 30 mins
   }
   return $token;
}
فکر کنم اگه بهتر توضیح بدی اصلا میخوای چیکار کنی بشه بهتر راهنمایی کرد !
آجه اگه قرارهست cookie مدام ریست بشه مقدار زمان را ۰ بده تا وقتی کاربر کلا سایت را بست همه چیز از بین بره یا حالا هر سناریو منطقی دیگه ای!!!
ممنون از پاسختون دوست عزیز
فرض کنید من یه فرم دارم که باید توسط یوزر تکمیل بشه حالا این یوزر ما صفحه فرم رو درخواست داده و 10 دقیقه تو صفحه فرم مونده اگه بیشتر از 30 دقیقه تو صفحه باشه رشته ایجاد شده توسط توکن تغییر میکنه و باید صفحه رو ریفرش کنه تا بتونه فرم رو ارسال کنه حالا من میخوام اگه یوز 10 دقیقه تو صفحه باشه و دوباره صفحه را ریفرش کنه زمان انقضای توکن دوباره از اول شروع بشه یعنی بعد از ریفرش 30 دقیقه وقت داشته باشه برا تکمیل فرم نه 20 دقیقه
به نظرم نیاز به کوکی نداری ! شما بیا یک جدول از token ها و زمان انقضا درست کن.
حالا وقتی کاربر فرم را درخواست میده یک token بساز برای نیم ساعت و بگذار توی فرمش ! وقتی ریست هم میکنه token جدید بساز دوباره و موقع دریافت اطلاعات بررسی کن token بیش از ۳۰ دقیقه ازش نگذشته باشه.

در مورد کوکی هم اگه شما یک cookie را دوباره ست کنی اون کوکی مقادیر و زمان جدید را میگیره.

در کل کدت باید کار کنه و نگفتی چه خطایی میگیری. راستی این token را برای جی میخوای ؟ برای جلوگیری از CSRF؟
(16-03-1396، 03:32 ب.ظ)Unique نوشته: [ -> ]به نظرم نیاز به کوکی نداری ! شما بیا یک جدول از token ها و زمان انقضا درست کن.
حالا وقتی کاربر فرم را درخواست میده یک token بساز برای نیم ساعت و بگذار توی فرمش ! وقتی ریست هم میکنه token جدید بساز دوباره و موقع دریافت اطلاعات بررسی کن token بیش از ۳۰ دقیقه ازش نگذشته باشه.

در مورد کوکی هم اگه شما یک cookie را دوباره ست کنی اون کوکی مقادیر و زمان جدید را میگیره.

در کل کدت باید کار کنه و نگفتی چه خطایی میگیری. راستی این token را برای جی میخوای ؟ برای جلوگیری از CSRF؟
ممنون دوست عزیز خودم هم میخواستم با دیتابیس درست کنم ولی گفتم ببینم اگه بدون دیتابیس بشه درست کرد دیگه با دیتابیس درگیر نکنم 
کد کار میکنه هیچ خطایی هم نمیده فقط یه مشکل هست وقتی یوزر مثلا بعد از 10 دقیقه که تو فرم هست ریفرش میکنه زمان از همون 20 دقیقه بعد که مونده حساب میشه من میخوام وقتی صفحه ریفرش میشه زمان ریست بشه و نیم ساعت بعد کوکی منقضی بشه بازم اگه با دیتابیس هم درست کنم همون مشکل برطرف نمیشه

بله برای جلوگیری از  CSRF
نقل قول:وقتی یوزر مثلا بعد از 10 دقیقه که تو فرم هست ریفرش میکنه زمان از همون 20 دقیقه بعد که مونده حساب میشه

حوب معلومه اینطوری میشه ! شما توی شرط گفتی زمانی توکن جدید بساز و ست کن روی زمان جدید که مقدار توکن توی کوکی ست نباشه.
حالا اگه میخوای با هر refresh توکن جدید بسازی کافیه ، setcookie را از else و کلا بدنه if بیاری بیرون ! همین/
ممنون دوست عزیز درست شد