PDA

View Full Version : سوال: کوکی /cookie



yyuser
دوشنبه 23 خرداد 1401, 07:08 صبح
سلام و خسته نباشید.
این تابع برای ساخت کوکی است که متوجه میشم کارش چیه.

function setCookie( cookie_name, cookie_value , exdays) {
var mydate ,expires , get_userinput;
get_userinput = document.getElementById("User_Input").value;
mydate = new Date();
mydate.setTime(mydate.getTime() + (exdays*24*60*60*1000));
expires = "expires="+ mydate.toUTCString();
document.cookie = cookie_name + "=" + cookie_value + ";" + expires + ";path=/";
if( get_userinput == "" ){
alert("مقدار وارد کنید");
}else{
setCookie("UserName", get_userinput , 365);
}
}

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

function getCookie(cookie_name) {
var name = cookie_name + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}

plague
دوشنبه 23 خرداد 1401, 13:42 عصر
سلام
کدت رو توی تگ مناسب بزار لطفا تا درست بشه خوندش


مثلا رشته کوکیتون اینه یک سری مقدار (value) که هرکدوم یک کلید(key) .و با سیمی کالون از هم جدا شدن

key=value; key=value; key=value;

وقتی بشکونیش بر اساس سیمی کالون ; میشه یک آرایه که تو هر خونش یک key=value هستش و به جز اولین خونه بقیشون یه اسپیس یا فضای خهالی هم اولشون دارن


تو حلقه میزاره تا قتی که اولین کاراکتر فضای خالی یا اسپیس بود حذفش میکنه

while (c.charAt(0) == ' ') {
c = c.substring(1);
}





این چک میکنه که که چیزی که دنبالش هستیم در نقطه 0 رشته وجود داشته باشه

if (c.indexOf(name) == 0)


مثلا شما یک رشته داری

c = 'key=value';

اگه بنویسی

c.indexOf('value')

بهت 4 برمیگردونه از سمت چپ جمله بشماری کاراکتر ها رو از 0 به 4 که برسی کلمه value رو میبینی ... در واقع میگرده تو جمله ببینه کلمه value از چه کاراکتری شروع شده

اگه بنویسی

c.indexOf('key=')

بهت 0 برمیگردونه چون کلمه k= در شروع جمله (نقطه 0 ) وجود داره
به طور خلاصه این

if (c.indexOf(name) == 0)

چک میکنه که مقدار name در نقطه 0 یا شروع جمله c قرار داشته باشه

در نهایت این


return c.substring(name.length, c.length);

value رو برمیگردونه تو این مثال شما

اگه مقدار c , name به این شکل باشه


c = 'key=value';
name = 'key=' ;

و شما value رو بخای از c بدست بیاری

باید از متن c کاراکتر های 4 تا 9 رو بدست بیاری که با تابع substring اینکارو میتونی بکنی


.length طول یک رشته رو بهت میده طبق این مقادیر

c = 'key=value';
name = 'key=' ;
اگه بزنی
c.length
name.length
به ترتیب بهت 9 و 4 میدن


c.substring(name.length, c.length)

طبق مثال من میشه


c.substring(4, 9)

یعنی این قسمتی که قرمز کردم


key=value

yyuser
یک شنبه 05 تیر 1401, 11:23 صبح
ممنون از شما.