PDA

View Full Version : سوال: كوكي



ravand
سه شنبه 18 بهمن 1390, 22:19 عصر
سلام
من تعاريف زيادي در مورد كوكي شنيدم مثل زير:
Cookie اطلاعاتی است که یک وب سایت روی کامپیوتر شما قرار می دهد تا بتواند در زمان های بعدی اطلاعاتی در مورد شما را به خاطر بیاورد.
مثلا كد زير رو نگاه كنيد :

<?php
setcookie("user", "meghdar", time()+3600);
?>
اين كد يك فايل با نام مثلاً user@localhost[1] در آدرس زير در ويندوز ايكس پي ايجاد ميكنه .
C:\Documents and Settings\khaki\Local Settings\Temporary Internet Files
كه شامل مقادير زير هست :

user
meghdar
localhost/
1536
2390668288
30205347
752746656
30205339
*
من به طور عملي ميخوام بدونم اين كوكي توي يك مرورگر كارش چيه؟
مثلاً الان من به طور عملي فهميدم اين Form data كارش اينه كه اگه متني رو قبلاً توي تكست نوشته باشي با يه دابل كليك توي تكست متن قبلي خودش مياد.
حالا كوكي چجوره؟ آيا ميشه اين فايل user@localhost[1] مطالب داخلش رو فهميد چيه؟

MMSHFE
چهارشنبه 19 بهمن 1390, 09:32 صبح
ببینید دوست گرامی، قضیه کوکی و Form Data کلاً فرق میکنه چون کوکی توسط هر مرورگری روی یک سیستم ذخیره بشه، توسط تمام مرورگرهای دیگه تا زمان اعتبارش قابل خوندن هست ولی Form Data مخصوص یک مرورگر هست و درواقع از امکانات مرورگر محسوب میشه. بطور کلی وظیفه کوکی ذخیره یکسری اطلاعات روی کامپیوتر کلاینت برای استفاده های بعدی هست. مثلاً اگه دقت کرده باشین، اکثر سایتها (مثل همین سایت برنامه نویس) موقع لاگین گزینه ای بنام Remember me یا «مرا بخاطر بسپار» و... دارن که اگه این گزینه رو انتخاب کنید، برحسب تنظیمات اون سایت، تا زمانی که مشخص شده، به محض واردکردن آدرس سایت، وارد حساب کاربری خودتون میشین و فرم لاگین ظاهر نمیشه. در اینجور موارد، از کوکی استفاده شده و یک فایل حاوی نام کاربری و رمز عبورتون (حالا یا بصورت متن خام و یا بصورت کدشده) روی سیستم شما ذخیره میشه و در مراجعات بعدی، اول چک میکنه ببینه اون فایل هست یا نه و اگه بود، اطلاعات ورود به سایت رو از توی اون میخونه و وارد میشه و دیگه از شما نام کاربری و... رو نمیخواد. وقتی هم که عمر اون کوکی بسر رسید، خودبخود حذف میشه (یا اینکه خودتون میتونید حذفش کنید) و اونوقت، چون فایل موجود نیست، دوباره فرم لاگین ظاهر میشه. درواقع برای استفاده از کوکی باید برنامه نویسی کنید ولی Form Data توسط مرورگر پیاده سازی میشه. مثلاً میتونید توی یک سایت، نام خودتون رو وارد کنید و از اون به بعد توی هر سایتی که فیلد «نام» وجود داشته باشه، با دوبار کلیک کردن، تمام «نام»هایی که قبلاً وارد کردین، فهرست میشه تا ازبین اونها یکی رو انتخاب کنید و البته همونطور که قبلاً گفتم، این مسئله ربطی به کوکی نداره چون برای مثال، اگه توی فایرفاکس یک نام رو وارد کنید و بعد توی اینترنت اکسپلورر روی فیلد نام دوبار کلیک کنید، اون نام رو نخواهید دید.
موفق باشید.

ravand
چهارشنبه 19 بهمن 1390, 09:43 صبح
خيلي ممنون مهندس اونقدر واضح توضيح دادي كه يه بچه ي كوچيك هم متوجه ميشه :لبخند: هميشه دعا ميكنم شما به سوالات من جواب بديد.:لبخند:
ميگم حالا اين كش كه ميگن چيه؟ اينطوري كه فهميدم كارش اينطوري كه وقتی یه فایل کش می شه، موقع مشاهده مجدد اون صفحه، فایل کش شده دیگه از سرور گرفته نمی شه و بجاش فایل موجود توی حافظه کش مرورگر اسفاده می شه. من اين تعريف رو شنيدم .

MMSHFE
چهارشنبه 19 بهمن 1390, 10:07 صبح
ممنون از نظر لطفتون. درمورد کش (Cache) باید اینطور توضیح بدم که بدلیل سرعت بالای دستورات کار با فایلهای متنی معمولی مثل txt. و... و سرعت بیشتر خوندن از اینگونه فایلها نسبت به دیتابیس، برای افزایش سرعت پیشنهاد میشه که اطلاعاتی که زیاد تغییر نمیکنن (مثل مقالات قدیمی موجود در سایتها و...) رو یکبار از دیتابیس بخونیم و توی یک فایل روی سرور ذخیره کنیم و در دفعات بعد، هرموقع اون مقاله درخواست شد، فایل رو بخونیم و دیگه از دیتابیس اطلاعات رو استخراج نکنیم. هرزمان هم خواستیم اون مطلب رو تغییر بدیم، فایل کش قبلی رو حذف کرده و دوباره اطلاعات رو از دیتابیس میخونیم و توی فایل میگذاریم. اسکریپت نمایش مقالات هم اول چک میکنه ببینه فایل کش برای اون مقاله موجود هست یا نه و اگه بود، همون رو میخونه و اگه نبود، اونوقت از دیتابیس اطلاعات رو استخراج میکنه و نمایش میده. مزیت اصلی این روش افزایش سرعت هست ولی معایبی هم داره. مثلاً اینکه حجم فایل بیشتر از حجم اطلاعات متناظر اون در دیتابیس هست چون هدرهای فایل و... هم باید بهش اضافه بشن و ضمناً اطلاعات موجود در دیتابیس در اکثر موارد فشرده سازی میشن که یکی از علتهای کاهش سرعت استخراج اطلاعات از دیتابیس نسبت به فایل هم همین مسئله هست. بعلاوه، فایلها اگه به درستی مدیریت نشن، امنیت نسبتاً کمتری دربرابر دیتابیس دارن. البته بحث مقالات سایت، صرفاً یک مثال بود و در هر قسمتی که احساس نیاز بشه، میتونیم از این سیستم استفاده کنیم. استفاده درست و اصولی از این تکنیک هم بستگی به مهارت و توان تجزیه و تحلیل طراح سایت داره، اما نکته ای که مهمه بگم اینه که برخلاف اونچه که تصور کرده بودین، این سیستم کش در حافظه مرورگر قرار نمیگیره و جدا از بحث کش شدن اطلاعات در سمت کلاینت هست. اون چیزی که منظور شماست، یکی از ویژگیهای مرورگرها هست که باعث میشه تصاویر و در برخی موارد متون و یا حتی کل صفحه درخواست شده، در کامپیوتر کلاینت ذخیره بشه و در درخواستهای بعدی، بررسی کنه اگه تغییری در نسخه موجود در سرور ایجاد نشده باشه، همون نسخه کلاینت رو نشون بده که اینطوری، هم سرعت بالاتر میره و هم ترافیک سرور هدر نمیره.
موفق باشید.

ravand
چهارشنبه 19 بهمن 1390, 11:14 صبح
مهندس
ميتوني يه چك باكس Remember me رو درست كني كه كوكيش بعد از مثلا دو دقيقه منقرض بشه ؟ مثلا يه فرم لوگين كه يه يوذر و يه پسورد داشته باشه با يك چك باكس Remember me .
در اين مورد خيلي نشستم توي نت سرچ كردم نتونستم بسازم چون تا حالا براي صفحه اي نساختم . براي همين بلد نبودم.
متشكرم

MMSHFE
چهارشنبه 19 بهمن 1390, 12:14 عصر
یک مثال براتون نوشتم و ضمیمه کردم. لطفاً اون رو بررسی کنید. اگه جایی رو متوجه نشدین، بفرمایید تا توضیح بدم. موفق باشید.

ravand
چهارشنبه 19 بهمن 1390, 15:03 عصر
خيلي ممنون مهندس
اين بهترين مثالي بود كه شما زديد.
يه چيز برام عجيبه . اينكه چرا وقتي كوكي رو كه ذخيره شده بود وقتي باز كردم ديدم يوذر و پسورد توش ذخيره شده؟
در صورتي كه در فرم هاي لوگين ديگه كه تست كردم ديدم توي كوكي يوذر و پسورد ذخيره نميشه.

user
ali
localhost/cookie/
1536
441587712
30205528
3542175008
30205527
*
pass
1234
localhost/cookie/
1536
441587712
30205528
3542175008
30205527
*

متشكرم

ravand
چهارشنبه 19 بهمن 1390, 15:08 عصر
آهان به خاطر اين خط هست اينم كه داديد فقط براي امتحان بود :لبخند:

setcookie('user', 'ali', time() + 120);
setcookie('pass', '1234', time() + 120);

ravand
چهارشنبه 19 بهمن 1390, 15:49 عصر
مهندس .
يه كم نشستم روي كد شما كار كردم ساده ترش كردم.

<form action="8.php" method="post">
<input type="text" name="user"><br>
<input type="password" name="pass"><br>
<input name="remember" type="checkbox" id="remember" value="1"><br>
<input type="submit" value="submit">
</form>
كدهاي php

<?php
if(strtolower($_POST['user']) == 'ali' && $_POST['pass'] == '1234') {
$username=$_POST['user'];
$password=$_POST['pass'];
if(isset($_POST['remember']) == 'true') {
setcookie("user", "$username", time()+120);
setcookie("pass", "$password", time()+120);
}
echo "welcom $username";
}else{
echo "نام كاربري و پسورد اشتباه است";
}
?>

الان توي فرم بعد از نوشتن صحيح يوذر و پسورد تيك چك باكس Remember me رو نمي زنم ، بعد دكمه ي submit رو مي زنم بعد ميرم توي اين آدرس :
C:\Documents and Settings\khaki\Local Settings\Temporary Internet Files
مي بينم هيچ كوكي ايجاد نشده .
براي بار بعد اين چك باكس رو ميزنم و ميرم مي بينم كه كوكي ايجاد شده.
از لطفتون متشكرم

ravand
چهارشنبه 19 بهمن 1390, 22:07 عصر
مهندس اينم براي سيژن نوشتم ببين خوبه؟
فقط دكمه ي خروج رو نميدونستم چجوري بنويسم.
index.php


<form action="8.php" method="post">
<input type="text" name="user"><br>
<input type="password" name="pass"><br>
<input type="submit" value="submit">
</form>

8.php

<?php
session_start();
$username=$_POST['user'];
$password=$_POST['pass'];
$_SESSION['user']="$username";
$_SESSION['pass']="$password";
if(($_SESSION['user']) == 'ali' && $_SESSION['pass'] == '1234') {
echo "welcom $username";
}else{
echo "نام كاربري و پسورد اشتباه است";
}
?>


اين هم صفحه اي ديگر در صورتي كه كاربر قبلاً لوگين كرده باشد بهش پيغام خوش آمدگويي ميده ولي در صورتي كه لوگين نكرده باشه و وارد اين صفحه بشه نميتونه وارد بشه و از صفحه خارج ميشه.

<?php
session_start();
$user=$_SESSION['user'];
if(($_SESSION['user']) == 'ali' && $_SESSION['pass'] == '1234')
{
echo "welcom $user";
}else{
header("location: index.php");
exit;
}
?>

Unique
چهارشنبه 19 بهمن 1390, 23:25 عصر
کوکی توسط هر مرورگری روی یک سیستم ذخیره بشه، توسط تمام مرورگرهای دیگه تا زمان اعتبارش قابل خوندن هست
ولی این غیر ممکنه ! Firefox و IE یا هر Browser دیگه ای Cookie های خودش را داره و بینشون Share نمیشه (البته تا اونجا که من سوات دارم) میشه که مقاله ای ، RFC چیزی معرفی کنید اگه خلاف اینه ؟

MMSHFE
پنج شنبه 20 بهمن 1390, 07:22 صبح
راستش لینک دقیقش الآن خاطرم نیست ولی یادمه یه جایی قبلاً خونده بودم که اگه کوکی رو روی دامنه خاصی تنظیم کنیم، توی همه مرورگرها جواب میده. میگردم و اگه دوباره پیداش کردم، میگذارم. ضمناً تعریف غیر ممکن رو توی دنیای امروز میتونید توی امضای بنده پیدا کنید :چشمک:

MMSHFE
پنج شنبه 20 بهمن 1390, 11:53 صبح
مهندس اينم براي سيژن نوشتم ببين خوبه؟
فقط دكمه ي خروج رو نميدونستم چجوري بنويسم.
مثال خوبی تهیه کردین. برای دکمه خروج هم کافیه یک صفحه logout.php بسازین و توی اون، کد زیر رو بنویسید:


if(isset($_SESSION['user'])) {
unset($_SESSION['user']);
}
header('Location: index.php');
exit();

موفق باشید.

Unique
جمعه 21 بهمن 1390, 18:59 عصر
ولی یادمه یه جایی قبلاً خونده بودم که اگه کوکی رو روی دامنه خاصی تنظیم کنیم، توی همه مرورگرها جواب میده
بعید میدونم ، چون Repository مرورگر ها با هم فرق میکنه اما امکانش هست روی Firefox بشه plugin نصب کرد که با IE بشه SYNC کرد اما بر عکسش اصلا به مایکروسافت خوش نمیاد !


ضمناً تعریف غیر ممکن رو توی دنیای امروز میتونید توی امضای بنده پیدا کنید
اتفاقا از امضا های محبوب من هستش ، اما در دنیای مرورگر ها مثلا غیر ممکنه document.all یه روزی برای gecko based ها جواب بده !