PDA

View Full Version : سوال: session&cookie



faezedashtaki
دوشنبه 18 آبان 1388, 16:08 عصر
سلام دوستان عزیز.
من میخوام بدونم که session چیست؟cookie چیست؟این دو چه تفاوت های با یکدیگر دارند؟
وچه جاهایی از cookie وچه جاهایی از session استفاده میشود؟ فقط این رو میدونم که session مانند یک متغیر در صفحات وب عمل میکنه.
با تشکر.

Mostafa_Dindar
دوشنبه 18 آبان 1388, 16:44 عصر
جواب سوالتون خیلی مفصله . بهتره فصل State Management یک کتاب مقدماتی رو مطالعه کنید .
ولی اگه بخوام خیلی خلاصه جواب بدم چون WebApplication ها از Potocol Http استفاده میکنند که یک Portocol کاملا Stateless(ناپایدار) هست یعنی هیچ این پرتکل هیچ مکانیزمی رو در اختیار سرور قرار نمیده که تشخیص بده آیا این درخواست و درخواست قبلی از یک کلاینت اومدند .
خوب پس ما به مکانیزم هایی نیاز داریم که این مشکل رو برطرف کنه .
یک روش استفاده از کوکی ها هست که یک فایل متنی هستند که در سمت کلاینت ذخیره میشوند که حجم کمی از داده تقریبا چند بایت رو هم بیشتر نمیتونند نگه دارند و نباید اطلاعات مهم رو در اون ذخیره کنید.
سشن هم یک مکانیزم دیگست که برای ردگیری حرکات کاربر و انتساب منابع روی سرور( مثل متغیرها و ..) . سشن سمت سرور ذخیره میشه و با بستن پنجره مرورگرو و یا ... از بین میره ...


موفق باشید

raziee
دوشنبه 18 آبان 1388, 21:14 عصر
خیلی کوچولو:
سشن سمت سرور و بیشتر برای نگهداشتن اطلاعات خاص که از نظر امنیت مهم هست.(توصیه شده که زیاد ازش استفاده نشه)(در برخی هاست ها که پیکر بندی آنتی ویروس درست نیست این سشن رو از بین میبره)
کوکی ها برای نگهداری اطلاعاتی در سمت کلاینت کاربرد دارند.(مثلا نگه داشتن زبان - تم )

s.mahmood
شنبه 19 دی 1388, 01:19 صبح
سلام ببخشد این پست قدیمی رو بالا اوردم
میشه یه لینک بهم بدید که مبحث کوکی و بخصوص session رو توش بخوبی توضیح داده باشه.
هر چی تو برنامه نویس گشتم چیزی پیدا نکردم.
session رو هم برای این موضوع میخوام.
وقتی کسی میخواد به یه صفحه ای وارد بشه باید لوگین کنه
پس با یه کد به صفحه لوگین انتقال داده میشه
حالا بعد از لوگین باید دوباره به همون صفحه برگردونده بشه
من از استادم پرسیدم گفت باید از sesion استفاده کنی اما چون وقت نبود عملی توضیح نداد
در ضمن من هیچی از کوکی و سژن باد نیستم

h.jaza
شنبه 19 دی 1388, 12:48 عصر
توصیه شده که زیاد ازش استفاده نشه
پس پیشنهاد شما چیه؟

Mostafa_Dindar
شنبه 19 دی 1388, 13:06 عصر
پس پیشنهاد شما چیه؟

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

ذخیره در کوکی به دو صورت امکان پذیر است :

//Write cookie directly to collection.
Response.Cookies["LastVisit"].Value = DateTime.Now.ToString();
Response.Cookies["LastVisit"].Expires = DateTime.Now.AddDays(1);

//Create an instance of a cookie then add it to the collection.
HttpCookie cookie = new HttpCookie("LastVisit");
cookie.Value = DateTime.Now.ToString();
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);


تغیر دادن با بروز رسانی همان کوکی ها :

//Modify a cookie by overwriting it with a new cookie of the same name.
Response.Cookies["LastVisit"].Value = DateTime.Now.ToString();
Response.Cookies["LastVisit"].Expires = DateTime.Now.AddDays(1);


حذف کردن : ( کافیه تاریخ انقضا اون رو به تاریخی قبل از الان ست کنید) :


//Delete a cookie by setting the expiration to a previous date/time.
Response.Cookies["LastVisit"].Expires = DateTime.Now.AddDays(-1);


خوندن از کوکی به دو صورت ( برای امنیت بیشتر Encode کردیم )

//Read a cookie value directly, encoding it for safety.
if (Request.Cookies["LastVisit"] != null)
{
Label1.Text = Server.HtmlEncode(Request.Cookies["LastVisit"].Value);
}

//Read a cookie by creating an instance of the cookie.
if (Request.Cookies["LastVisit"] != null)
{
HttpCookie cookie4 = Request.Cookies["LastVisit"];
Label1.Text = Server.HtmlEncode(cookie4.Value);
}

مطابق مستندات کوکی مرورگرها برای هر Domain بیشتر از 20 تا کوکی نمیتونند ذخیره کنند. برای دور زدن این مشکل میتونیم از کوکی های MultiValue استفاده کنیم . کوکی ها MultiValue کوکی هایی هستند که هر قدر دلمون خواست میتونم Subkey درون اون ایجاد کنیم .
برای مثال در کد زیر یک کوکی چند مقداره بنام UserData درست میکنیم UserID و LastVisit و FavoriteTheme رو به دو صورت به اون انتصاب میدیم :

//Create three subkey values directly in the cookie collection.
Response.Cookies["UserData"]["LastVisit"] = DateTime.Now.ToString();
Response.Cookies["UserData"]["UserID"] = "10";
Response.Cookies["UserData"]["FavoriteTheme"] = "Blue";
Response.Cookies["UserData"].Expires = DateTime.Now.AddDays(1);

//Create an instance of a cookie, then add three subkeys, and add it to the collection.
HttpCookie cookie1 = new HttpCookie("UserData");
cookie1.Values["LastVisit"] = DateTime.Now.ToString();
cookie1.Values["UserID"] = "10";
cookie1.Values["FavoriteTheme"] = "Blue";
cookie1.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie1);

Mostafa_Dindar
شنبه 19 دی 1388, 14:56 عصر
متغیر های Session در شیی SessionStateItemCollection ذخیره میشوند که از Property شیی HttpContext قابل دسترسی هستند (در صورتی که در در فایل Cs میخواهید از آنها استفاده کنید باید از این شی استفاده کنید ) در صورتی که در WebForm ها از آن استفاده میکنید از Property شی Page قابل دسترسی هستند .

ذخیره کردن در Session به زبان سی شارپ :

string firstName = "Jeff";
string lastName = "Smith";
string city = "Seattle";
Session["FirstName"] = firstName;
Session["LastName"] = lastName;
Session["City"] = city;

به زبان وی بی :

Dim firstName As String = "John"
Dim lastName As String = "Smith"
Dim city As String = "Seattle"
Session("FirstName") = firstName
Session("LastName") = lastName
Session("City") = city

خواند مقدار ها ار سشن به زبان سی شارپ :

string firstName = (string)(Session["First"]);
string lastName = (string)(Session["Last"]);
string city = (string)(Session["City"]);

به زبان وی بی :

Dim firstName as String = CType(Session.Item("FirstName"), String)
Dim lastName as String = CType(Session.Item("LastName"), String)
Dim city as String = CType(Session.Item("City"), String)

همانطور که ملاحظه کردید هنگام خواندن Session باید اون رو به نوع مورد نظرتون Cast کنید . (البته در صورتی که قابل Cast باشه یعنی نمیتونید یک رشته در سشن ذخیره کنیدو موقع خوندن اون رو به نوع عددی تبدیل کنید )

بر خلاف Cookie که تنها نوع متنی رو میتوان در آن ذخیره کرد ما میتوانیم هر نوعی رو در اون ذخیره کنیم مثلا یک کلاس خاص که خودمان طراحی کرده ایم یا آرایه یا ....

در مثال پائین فرض کنید یک ArrayList بنام myArray را در سشن ذخیره کردیم پس هنگام خواندن باید Cast مورد نظر را انجام دهیم :
به زبان سی شارپ
ArrayList myArray = (ArrayList)Session["myArray "];

به زبان وی بی
Dim myArray As ArrayList = CType(Session("myArray "), ArrayList)

همیشه سعی کنید قبل از خوندن Session ها چک کنید که Session شما مقدار داشته باشه تا با خطای NullRefrence مواجه نشید .

سربلند باشید

s.mahmood
یک شنبه 20 دی 1388, 01:19 صبح
همیشه سعی کنید قبل از خوندن Session ها چک کنید که Session شما مقدار داشته باشه تا با خطای NullRefrence مواجه نشید .
کد این قسمتم بگید.
در ضمن میشه مقدار session و کوکی رو عوض کرد؟
یعنی به روشی مقدار اینا رو عوض کرد تا برنامه جوابای اشتباهی به ما بده؟

Mostafa_Dindar
یک شنبه 20 دی 1388, 11:07 صبح
کد این قسمتم بگید.


قبلا گفته بودم :

if (Request.Cookies["LastVisit"] != null)
يا
if (Session["myArray "] != null)
كلا منطقي اين هست كه هميشه قبل از اينكه مقادير رو بگيريد برسي كنيد كه مقدار داشته باشند در غير اينصورت مكانيزم ديگري را اعمال كنيد



در ضمن میشه مقدار session و کوکی رو عوض کرد؟
یعنی به روشی مقدار اینا رو عوض کرد تا برنامه جوابای اشتباهی به ما بده؟

ميتونيم مقادير را از هريك بگيريم و Cast مورد نظر را اعمال و انتصاب بديم .
اين كه مقدار اينها رو عوض كنيم تا برنامه جوابهاي اشتباهي به ما بده رو متوجه نميشم

s.mahmood
سه شنبه 22 دی 1388, 17:51 عصر
این که مقدار اینها رو عوض کنیم تا برنامه جوابهای اشتباهی به ما بده رو متوجه نمیشم
یعنی مقدار کوکی رو کسی غیر از برنامه نویس عوض کنه
خود کاربر
به نظرم باید محتویات کوکی رو به صورت رمز بنویسیم(ربطی به hash داره؟)درسته؟

Mostafa_Dindar
سه شنبه 22 دی 1388, 18:11 عصر
یعنی مقدار کوکی رو کسی غیر از برنامه نویس عوض کنه
خود کاربر
به نظرم باید محتویات کوکی رو به صورت رمز بنویسیم(ربطی به hash داره؟)درسته؟

اطلاعات کوکی در Client دخیره میشن پس کلاینت میتونه اونها رو تغیر بده یا حذف کنه . به همین جهت نباید اطالاعات مهمی در آن ذخیره بشه .

کوکی ها در آدرس زیر دخیره میشوند
در اينترنت اكسپلورر

\Documents and Settings\[user]\Cookies


در موزیلا :

\Documents and Settings\[user]\Application Data\Mozilla\Firefox\Profiles\[random
folder name]\Cookies.txt

rayson
پنج شنبه 04 آبان 1391, 11:56 صبح
سلام دوستان.
من میخوام برای Form در ویندوز اپلیکیشن Session با زبان C# بگذارم .
بچه ها زحمت کشیدن در پست بالا کد مربوطه را گذاشتن .
من دقیقا اطلاع ندارم که باید در کدام قسمت ازForm این کد ر ا قرار بدم.
بالا زده در زبان C# در pro... اما چنین بخشی در form من وجود نداره فقط Form Load وجود دارد .
اصلا در ویندوز اپلیکیشن قابلیت این کار وجود دارد ؟
برای اینکه من Form1 را نامش را به Form4 تغییر دادم . یک Form دیگه جای نام آن گذاشتم اما زمان اجرا برنامه باز هم به همان فرم که در ابتدا Form1 نام داشت رفت .
از دوستان خواهش دارم در مورد این موضوع به من کمک کنند .

rayson
پنج شنبه 04 آبان 1391, 16:02 عصر
کسی از دوستان هست به من کمک کنه ؟:((

hamed_hossani
جمعه 05 آبان 1391, 11:43 صبح
من میخوام برای Form در ویندوز اپلیکیشن Session با زبان C#‎ بگذارم .
session در سمت سرور وجود داره!
برای ویندور اپلیکیشن کاربرد نداره ! اینجا تالار asp است