کوکی چیست ؟

هر کوکی  ، یک متغیر است که مقداری عددی یا غیر عددی در ان قرار می گیرد

 

به چه در می خوره ؟

رد پایی است که سایت شما در کامپیوتر کاربر از خود بر جای می گذارد

 

مثلا یعنی چی ؟

مثلا  اولین بار که کسی از اولین صفحه سایت شما دیدن کرد ، ان صفحه یک کوکی با مقدار یک در سیستم کاربر ایجاد می کند . دفعه بعد که کاربر دوباره از سایت شما دیدن کند ، شما ان مقدار را باضافه یک کنید و این طوری هر دفعه متوجه می شوید که الان چندمین بار است که او از سایت شما دیدن می کند

 

 

 

یا مثلا ایا با خود فکر کرده اید که چگونه مرورگر ، اسم کاربری و رمزهای شما را به خاطر می س=ارد ؟

 

بله با استفاده از کوکی ها

محل ذخیره کوکی برای هر مرورگری ، مسیر خاصی  است

 
ایجاد کوکی

برای ایجاد کردن کوکی ، قرار دادن مقدار در کوکی و همچنین برای تغییر مقدار کوکی از  دستور Response.Cookies استفاده می شود

نکته :

دستور Response.Cookies  باید قبل از تگ html باز نوشته شود

روش استفاده از این دستور :

برای ایجاد کردن کوکی و قرار دادن مقدار در ان از دستور زیر استفاده می کنیم :

Response.Cookies(name)[(key)|.attribute]=value

برای خواندن مقدار کوکی که قبلا ایجاد شده است از دستور زیر استفاده می کنیم :

variablename=Request.Cookies(name)[(key)|.attribute]

دستور اول برای تنظیم مقدار کوکی و دستور دوم برای گرفتن مقدار کوکی از قبل تنظیم شده بکار می رود

آشنایی با پارامترها :

 

  • name:

استفاده از این پارامر اجباری است و نام کوکی را مشخص می کند

 

  • value :

برای دستور اولی که یک کوکی را ایجاد می کند اجباری است و مقدار کوکی جدید را مشخص می کند

 

  • attribute :

استفاده از این پارامتر اختیاری است

دقت کنید قبل از ان نقطه است

اطلاعاتی را درباره کوکی مشخص می کند

و می تواند یکی از مقادیر زیر باشد :

 

  1. Domain : این گزینه فقط نوشتنی است یعنی در این گزینه فقط می توان مقدار نوشت .کوکی فقط به  دستور request دومینی که اینجا مشخص شده ارسال می شود 
  2. Expires : تاریخ انقضای کوکی را مشخص می کند
  3. HasKeys : این گزینه فقط خواندنی است . یعنی فقط می توان مقداری که از طرف سرور در ان قرار گرفته را خواند و در برنامه استفاده کرد . این گزینه مشخص می کند ایا کوکی خواسته شده دارای کلید است یا نه ( در قسمت های انتهایی این صفحه با کلید اشنا خواهید شد ) این تنها صفتی است که می توان از ان در دستور Request.Cookies استفاده کرد
  4. Path :این صفت فقط نوشتنی است یعنی می توان فقط در ان مقداری را نوشت . اگر مقدار این صفت مشخص شود ، انگاه کوکی فقط برای دستور request ای که در این مسیر است ارسال خواهد شد در غیر این صورت مسیر پیش فرض همان مسیر application خواهد بود
  5. Secure :این صفت فقط نوشتنی است یعنی می توان فقط در ان مقداری را نوشت .مشخص می کند  ایا کوکی ایمن است ؟

 

  • key

استفاده از این پارامتر اختیاری است . مشخص می کند . مشخص می کند کدام مقدار کوکی باید کلید داشته باشد ( کوکی کلید دار چیزی شبیه ارایه می شود که اندیس اول ان یعنی نام کوکی بین همه اعضا یکسان است و اندیس دوم یک اسم منحصر بفرد برای هر عضو می باشد)

 
 مثال
در مثال زیر ما کوکی به نام firstname ایجاد می کنیم و مقدار Alex را به ان تخصیص می دهیم

 

<%
Response.Cookies("firstname")="Alex"
%>

 همین طور این امکان وجود دارد که ویژگیهایی را در زمان ایجاد کوکی تنظیم کنیم

مثلا اگر کوکی مثل مثال بالا ایجاد شود به محض اینکه کاربر مرورگر خود را می بندد کوکی هم از بین می رود و دیگر در کامپیوتر کاربر باقی نمی ماند

 

اما می توان برای کوکی تاریخ انتقضا مشخص کرد

 مثال :

خط اول :

ایجاد کوکی به نام firstname با مقدار alex

خط دوم :

تعیین  تاریخ انقضا برای کوکی firstname

 

<%
Response.Cookies("firstname")="Alex"
Response.Cookies("firstname").Expires=#May 10,2012#
%>

 تاری انقضا بر اساس تاریخ سرور وب است
 
بدست اوردن مقدار کوکی ذخیره شده در کامپیوتر کاربر
 دستور Request.Cookies برای دریافت مقدار یک کوکی به کار می رود

 در دستورات زیر ما مقدار موجود در کوکی firstname را که در رایانه کاربر ذخیره شده است دریافت کرده و در متغیر fname قرار می دهیم

سپس در خط بعد این مقدار را نمایش می دهیم

 

<%
fname=Request.Cookies("firstname")
response.write("Firstname=" & fname)
%>

 

 خروجی دستورا ت بالا :

Firstname=Alex

 
کوکی همراه با کلید

 گاهی پیش می اید که می خواهیم چندین کوکی که به هم وابسته هستند را در کامپیوتر کاربر ذخیره کنیم

مثلا نام و نام خانوادگی و کشور و سن کاربر را

 در این  مواقع یک اسم برای تمام این چهار کوکی در نظر می گیریم

برای اینکه قاطی نشوند برای هر کوکی یک کلید در نظر می گیریم که اسم این کلید برای ان کوکی منحصر بفرد خواهد بود

 مثال زیر روش کار را نشان می دهد :

 

<%
Response.Cookies("user")("firstname")="John"
Response.Cookies("user")("lastname")="Smith"
Response.Cookies("user")("country")="Norway"
Response.Cookies("user")("age")="25"
%>

 در این مثال کوکی به نام user دارای اطلاعات چهار گانه در باره کاربر  می باشد
 
خواندن مقدار تمام کوکی ها
 به دستورات زیر  دقت کنید :

 

<%
Response.Cookies("firstname")="Alex"
Response.Cookies("user")("firstname")="John"
Response.Cookies("user")("lastname")="Smith"
Response.Cookies("user")("country")="Norway"
Response.Cookies("user")("age")="25"
%>

 

 تصور کنید سرور تمام کوکی های بالا را برای کامپیوترتان بفرستد

حالا ما می خواهیم تمام کوکی های ارسال شده به کامپیوتر کاربر را بخوانیم

 

 مثال زیر روش کار را نمایش می دهد

ولی قبل از هر چیز برنامه به کمک ویژگی HasKeys تشخیص می دهد ایا کوکی از نوع کلید دار می باشد یا نه

 

 

<!DOCTYPE html>
<html>
<body>

<%
dim x,y
for each x in Request.Cookies
  response.write("<p>")
  if Request.Cookies(x).HasKeys then
    for each y in Request.Cookies(x)
      response.write(x & ":" & y & "=" & Request.Cookies(x)(y))
      response.write("<br>")
    next
  else
    Response.Write(x & "=" & Request.Cookies(x) & "<br>")
  end if
  response.write "</p>"
next
%>

</body>
</html>

 گفتیم کوکی ها از طرف سرور ایجاد شده در کامپیوتر کاربر ذخیره می شوند

با دستور Request.Cookies می توا ن مقدار کوکی های ایجاد شده در کامپیوتر کاربر را خواند

 

 مثلا برای خواندن کوکی X دستور زیر را می نویسیم

Request.Cookies(x)

 

 

for each x in Request.Cookies

اگر نام کوکی های ایجاد شده در رایانه کاربر را با متغیر مجهول x نشان دهیم

این دستور یعنی با زای تمام کوکی های موجود در رایانه کاربر  دستورات for را انجام بده

 

  if Request.Cookies(x).HasKeys then

یعنی اگر کوکی پیدا شده از رایانه کاربر ، دارای کلید است انگاه دستورات درو ن if را انجام بده

 

for each y in Request.Cookies(x)
      response.write(x & ":" & y & "=" & Request.Cookies(x)(y))
      response.write("<br>")
    next

 

اگر کلیدهای کوکی x را با مجهول y نشان دهیم

دستور شروع حلقه یعنی ، بازای هر کلید کوکی x دستورات درون حلقه را انجام بده

دستورات درون حلقه ب تکرار می شوند و هر بار برای یکی از کلیدهای کوکی

Request.Cookies(x)(y)

این دستور یعنی از کوکی x ،  مقدار کلیدی که الان y به ان اشاره دارد را از رایانه کاربر بخوان

خود x و y هم که اسم کوکی و اسم کلید در انها قرار می گیرد

خروجی دستورات بالا :

firstname=Alex

user:firstname=John
user:lastname=Smith
user:country=Norway
user:age=25

پشتیبانی نکردن مرورگر از کوکی
 اگر مرورگری کوکی ها را شناسایی نکند ، شما ناچارید روش دیگری را برای ارسال کردن اطلاعات از یک صفحه به صفحه دیگر در برنامه های asp بکار ببرید
 دو روش برای انجام این کار وجود دارد :
 روش اول :
 اضافه کردن پارامتر به url

 شما می توانید پارامترهایی را به ادرس صفحه مقصد اضافه کنید

تا وقتی داریم از صفحه ای به صفحه دیگر می رویم انها را هم با خود ببریم

 مثال :

 فرض کنید در صفحه test1.html پیوندی با عنوان Go to Welcome Page وجود دارد

می خواهیم با کلیک روی این پیوند به صفحه welcome.asp برویم

(دقت کنید دستورات asp در سرور اجرا می شود نتیجه ان در مرورگر کاربر دیده می شود )

 

اگر تگ a را برای این کار در نظر بگیریم ، تا اینجا پیوند بصورت زیر خواهد بود :

<a href="welcome.asp>Go to Welcome Page</a>
حالا فرض کنید می خواهیم متغیری به نام fname با مقدار john و lnae با مقدار smith را برای صفحه welcome.asp ارسال کنیم
<a href="welcome.asp?fname=John&lname=Smith">Go to Welcome Page</a>

 همانطور که مشاهده کردید ، متغیرها و مقدار شان را در حالیکه بین انها علامت & است بعد از علامت سوال می نویسیم

نام صفحه مقصد ، نام متغیرها (پارامترها و مقدارشان ) همگی در href نوشته می شوند

 
 
 دریافت مقدار پارامترها در برنامه welcome.asp
 دستورا ت زیر این کار را انجام می دهند :

 

<%
fname=Request.querystring("fname")
lname=Request.querystring("lname")
response.write("<p>Hello " & fname & " " & lname & "!</p>")
response.write("<p>Welcome to my Web site!</p>")
%>

 برای دریافت مقدار متغیرهای ارسالی از دستور Request.querystring استفاده می کنیم :

 

Request.querystring("fname")

 در برنامه بالا مقدار پارامتر fname ارسالی خوانده شده در متغیر fname قرار می گیرد
 
  روش دوم:
 استفاده از فرم

 شما می توانید از فرم استفاده کنید

فرم ، داده های دریافتی از کاربر را بعد از کلیک روی دکمه submit به صفحه welcome.asp ارسال می کند

 

 مثال

در فایل test1.html دستورات زیر را برای ایجاد فرم بنویسیم

 

<form method="post" action="welcome.asp">
First Name: <input type="text" name="fname" value="">
Last Name: <input type="text" name="lname" value="">
<input type="submit" value="Submit">
</form>

 
 سپس در فایل welcome.asp دستورات زیر را برای دریافت داده های ارسالی فرم می نویسیم :

 

<%
fname=Request.form("fname")
lname=Request.form("lname")
response.write("<p>Hello " & fname & " " & lname & "!</p>")
response.write("<p>Welcome to my Web site!</p>")
%>

 برای دریافت داده های وارد شده در فیلدهای فرم ، از دستور Request.form استفاده می شود

 درون پرانتز این دستور ، نام فیلدی از فرم را که می خواهید مقدار ان را بخوانید بنویسید

مقدار خوانده شده را می توان د ر یک متغیر قرار داد

 
مثال

 در notepad یک فایل asp به نام test3 ایجاد کنید

انرا در مسیر سرور وب ذخیره نمائید

 دستورات زیر را در ان کپی کنید

 

<%
dim numvisits
response.cookies("NumVisits").Expires=date+365
numvisits=request.cookies("NumVisits")

if numvisits="" then
   response.cookies("NumVisits")=1
   response.write("Welcome! This is the first time you are visiting this Web page.")
else
   response.cookies("NumVisits")=numvisits+1
   response.write("You have visited this ")
   response.write("Web page " & numvisits)
   if numvisits=1 then
     response.write " time before!"
   else
     response.write " times before!"
   end if
end if
%>

<!DOCTYPE html>
<html>
<body>
</body>
</html>

 
 برنامه را اجرا کنید
 هر بار روی رفرش مرورگر کلیک کنید عدد نمایش داده شده تغییر می کند

 این برنامه چه می کند ؟

این برنامه با استفاده از کوکی ای که در سیستم کاربر ایجاد کرده است ، می فهمد کاربر برای چندمین بار است که ان صفحه را دارد می بیند

 توضیحات :

 اول اینکه دستورات Asp در سرور اجرا شده نتیجه در مرورگر کاربر نمایش داده می شود

دوم اینکه می توان دستورات Asp را خارج از تمام تگ های html و قبل از ان نوشت

 

dim numvisits

تعریف متغیری به نام numvisits

 

response.cookies("NumVisits").Expires=date+365

به محض باز شد ن صفحه وب ، تاریخ انقضا برای کوکی NumVisits برابر 365 روز بعد از تاریخ

امروز سرور در نظر گرفته می شود

 

numvisits=request.cookies("NumVisits")

مقدار کوکی NumVisits از رایانه کاربر خوانده می شودو در متغیر با نام اختیاری numvisits  قرار می گیرد

نام کوکی و نام متغیر ظاهرا شبیه هم اند اما با هم فرق دارند

 

 

 

if numvisits="" then

 

در صورتیکه کاربر برای اولین بار است که این صفحه را می بیند در نتیجه کوکی numvisits هنوز د ر رایانه او وجود ندارد

لذا نتیجه اجرای  دستور قبل که خواندن مقدار numvisits بود برابر رشته تهی خواهد بود

 حال این دستور if بررسی می کند اگر کوکی قبلا ایجاد نشد ه انرا با دستور بعدی ایجاد  کند

 

   response.cookies("NumVisits")=1

 

کوکی numvisits ایجاد شده و مقدار یک در ان قرار می گیرد

یعنی این اولین باری است که کوکی در رایانه کاربر ایجاد می شود

 

   response.write("Welcome! This is the first time you are visiting this Web page.")

پیام خوش امد به کاربر نشان داده می شود

 

else

اما در غیر این صورت ، یعنی اگر کوکی numvisites قبلا در رایانه کاربر ایجاد شده و مقدار ان برابر "" نیست پس

 

 

 

  response.cookies("NumVisits")=numvisits+1

 

یک واحد به مقدار قبلی کوکی که در متغیر numvisits قرار داده بودیم ، اضافه کرده و مقدار ان را در رایانه کاربر تغییر دهد

یعنی این دفعه بعدی است که کاربر از صفحه ما دیدن می کند

 

response.write("You have visited this ")
   response.write("Web page " & numvisits)

 

در خط اول می گوید شما از این صفحه تا به حال دیدن کرده اید

در خط دوم مقدار متغیر numvisits را نمایش می دهد

این متغیر مقدار قبل از تغییرات جدید کوکی را در خود دارد

 

 

if numvisits=1 then
     response.write " time before!"
 

اگر numvisits برابر یک است یعنی این دفعه دوم است که از صفحه دیدن می کنید

ادامه پیام قبلی اضافه می کند پیام time before! را

 

توجه کنید : همانطور که قبلا گفتم مقداری که هم اکنون در کوکی است درون متغیر numvisits قرار می گیرد

و بعد مقدار جدید در کوکی قرار می گیرد

پس همیشه این متغیر تعداد دفعاتی که تا قبل از الان را که  از صفحه دیدن کرده ایم نشان می دهیم

 

 

else
     response.write " times before!"

 

در غیر این صورت یعنی اگر قبلا بیشتر از یک بار بوده که از صفحه دیدن کرده ایم

یک s به time می چسباند که نشانه جمع بودن است

و انرا در ادامه پیغام چند دستور قبل ، نشان می دهد

 

 درون تگ html این مثال ما هیچ دستوری نداریم

شما می توانید یک صفحه وب ساده طراحی کنید و از دستورات asp درون تگ html استفاده نمائید

و این صفحه را زیباتر کنید

 
 مثلا شما می توانید تمام دستورات Asp قبل از تگ html این مثال را بردارید و درون تگ body قرار دهید و از تگ های html هم در ان استفاده کنید
 مثل زیر :

 


<!DOCTYPE html>
<html>
<body>

<font color=green size=24>
<%
dim numvisits
response.cookies("NumVisits").Expires=date+365
numvisits=request.cookies("NumVisits")

if numvisits="" then
   response.cookies("NumVisits")=1
   response.write("Welcome! This is the first time you are visiting this Web page.")
else
   response.cookies("NumVisits")=numvisits+1
   response.write("You have visited this ")
   response.write("Web page " & numvisits)
   if numvisits=1 then
     response.write " time before!"
   else
     response.write " times before!"
   end if
end if
%>
</font>
</body>
</html>

 خروجی دستورات Asp بالا تحت تاثیر ویژگیهای تگ font نشان داده می شود

 

یا اینکه شما می توانید دستورات Asp را تکه تکه کنید و هر تکه را با یک حالت font نمایش دهید

مثل زیر :

 


<!DOCTYPE html>
<html>
<body>

<font color=green size=24>
<%
dim numvisits
response.cookies("NumVisits").Expires=date+365
numvisits=request.cookies("NumVisits")

if numvisits="" then
   response.cookies("NumVisits")=1
   response.write("Welcome! This is the first time you are visiting this Web page.")
else
   response.cookies("NumVisits")=numvisits+1
   response.write("You have visited this ")

%>

</font>
<font color=red size=34>

<%
   response.write("Web page " & numvisits)
   if numvisits=1 then
     response.write " time before!"
   else
     response.write " times before!"
   end if
end if
%>
</font>
</body>
</html>

همانطور که در برنامه بالا مشاهده می کنید

من دستور else را نصفه کاره رها کردم

تگ Asp را بستم

بعد بیرون از تگ Asp دو دستور html نوشتم

بعد ادامه دستور else را که Asp است درون تگ باز و بسته asp نوشتم

خیلی جالبه و لذت بخش !