Siku nyingine niliamua kuangalia kwa karibu vidakuzi: jinsi zinavyofanya kazi, jinsi zilivyoundwa, jinsi ya kuzitumia. Kwa uelewa wa mwisho, iliamuliwa kupakua programu-jalizi ya kufanya kazi na vidakuzi katika JQuery. Kiungo cha programu-jalizi kimeambatishwa Kuki Plugin kwa jQuery.
Nitaanza na nadharia. Vidakuzi ni sehemu muhimu Itifaki ya HTTP. Vidakuzi hupitishwa kutoka kwa seva hadi kwa mteja katika kichwa cha majibu cha HTTP cha seva. Kwa usahihi zaidi - katika uga wa Set-Cookie wa kichwa hiki. Sehemu ya Set-Cookie inaweza kuwa na data kutoka kwa vidakuzi vingi. Pia, kichwa cha majibu ya HTTP kinaweza kuwa na sehemu kadhaa za Set-Cookie. Umbizo la sehemu ya Set-Cookie katika kichwa cha majibu ya HTTP ya seva imetolewa hapa chini:
Set-Cookie:<
name>=<
value>
[
;
<
name>=<
value>
]
...
[; inaisha muda wake=<
date>] [ ; kikoa=<
domain_name>
]
[; njia=<
some_path>] [ ; salama [; http pekee]
Inaweza kuonekana kuwa safu ya Set-Cookie ya kichwa cha majibu ya seva ina mfuatano wa mifuatano iliyotenganishwa na vibambo ";" (semicolon). Moja au zaidi = jozi hufuata kwanza. Kila moja ya jozi hizi inalingana na kuki moja inayoitwa jina na thamani. Kisha fuata sifa ambazo vidakuzi vilivyomo katika uga huu wa Set-Cookie vimewekwa. Yafuatayo ni maelezo ya thamani za sifa za vidakuzi.
- Sifa hiyo inaisha muda wake. Imebainishwa katika umbizo: expires= . Inafafanua tarehe na wakati wa mwisho wa matumizi ambayo imewekwa na sehemu hii ya Set-Cookie katika kichwa cha majibu ya HTTP cha seva ya kidakuzi. Thamani lazima iwe mfuatano unaobainisha saa za Greenwich Meridian (GMT) katika umbizo la "DAY, DD-MMM-YYYY HH:MM:SS GMT" (kwa mfano "Jumanne, 28 Feb 2006 12:41:04 GMT"). Mara kidakuzi kinapoisha muda wake, kinafutwa na kivinjari. Ikiwa sifa ya kuisha muda wake haijawekwa (tarehe ya kuisha kwa kidakuzi haijawekwa), vidakuzi hufutwa wakati kivinjari kinatoka. Vidakuzi hivi huitwa vidakuzi vya "kikao" (vinatumika hadi mwisho wa kipindi cha sasa).
- sifa ya kikoa. Imebainishwa katika kikoa cha umbizo= . Hubainisha mwisho wa seti ya majina ya vikoa ambamo vidakuzi vinavyowekwa ni halali. Kwa mfano, ikiwa katika kuweka vidakuzi, thamani ni .codeguru.ru, vidakuzi vilivyowekwa itatumwa kwa seva wakati wa kuomba hati kutoka kwa tovuti ziko kwenye vikoa web.codeguru.ru, forum.codeguru.ru, nk. Ambapo hali ya ziada kutuma kuki kutaangalia thamani ya sifa ya njia - tazama hapa chini. Sifa ya kikoa ni muhimu sana. Inaweza kutumika, kwa mfano, kuandaa mfumo wa umoja uthibitishaji wa mtumiaji kwa huduma mbalimbali za wavuti ziko kwenye vikoa vidogo tofauti. Kwa mfano, kwenye tovuti kuu na kwenye jukwaa la tovuti. Ili kuepuka utumaji usiodhibitiwa wa vidakuzi, thamani haipaswi kuwa na jina la eneo pekee (kwa mfano, .com, .net.ru, nk.).
- Sifa ya njia. Imebainishwa katika umbizo path= . Inafafanua seti ya URL ambazo vidakuzi vilivyowekwa ni halali. Kwa mfano, ikiwa thamani wakati wa kuweka kidakuzi ni /temp, basi vidakuzi vilivyowekwa vitatumwa wakati wa kuomba hati, ikiwa ni pamoja na njia /temp000 na /temp/temp.htm. Ikiwa thamani ya njia haijabainishwa, inachukuliwa kuwa njia ya rasilimali kwa ombi ambalo vidakuzi viliwekwa.
- Sifa salama. Hii ni sifa aina ya boolean. Kubainisha sifa salama katika sehemu ya Set-Cookie ya kichwa cha majibu cha HTTP cha seva hufanya vidakuzi kuwekwa salama. Vidakuzi kama hivyo lazima vitumwe kwa seva kwa kutumia itifaki ya https pekee. HTTPS ni sawa itifaki ya http, data pekee kati ya mteja na seva hupitishwa kupitia muunganisho salama (data imesimbwa) SSL (Safu ya Soketi Salama).
- HttpOnly sifa. Hii ni sifa ya Boolean. Kubainisha sifa ya HttpOnly katika sehemu ya Set-Cookie ya kichwa cha majibu cha HTTP cha seva hufanya vidakuzi vilivyowekwa kutofikiwa na hati za mteja (hii ni kwa sababu za usalama).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
jQuery.cookie = kazi() ( var url = location.href ; // njia ya vidakuzi vilivyosanikishwa this .cookieID = "cookies" ; // jina la kutofautisha ambalo litakuwa na vidakuzi vyetu hii .set = kazi (chaguo) ( // Kazi ya kuweka vidakuzi var cookieContent = "" ; // anzisha utofauti wa kwa kitanzi var filterProperties = ( "cookieID" : 0 , "set" : 1 , "pata" : 2); // tengeneza kitu chenye maadili yanayojulikana chaguzi = chaguzi || (); // ikiwa vigezo vya mtumiaji vinapitishwa, tumia. Hatusakinishi chochote kwa chaguo-msingi. kwa (var mali katika hii ) ( // iterate kupitia vitu vyote vya kitu kinachosababisha ikiwa (! (property in filterProperties) ) ( // vuta vitu vyote isipokuwa vile vilivyomo kwenye kichujioProperties ikiwa (hii [ mali] === null ) hii [ mali] = "" ; // ikiwa tuna sifuri, ibadilishe na "" cookieContent += (mali) + ":" + (hii [ mali] ) + "," ; // andika jina la kutofautisha + thamani ya kutofautisha } } cookieContent = cookieContent.substring ( 0 , cookieContent.length - 1); // ondoa koma ya mwisho var expires = "" ; // anzisha utofauti ikiwa (options.expires && (typeof options.expires == "number" || options.expires .toUTCString ) ) ( // ikiwa tuna thamani yoyote basi tarehe ya var; // tengeneza kigezo cha tarehe ikiwa (typeof options.expires == "number" ) ( // ikiwa hii ni nambari date = new Date() ; // tarehe ya sasa date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000) ) ; // weka wakati ) mwingine ( tarehe = chaguzi.inaisha muda wake; // thamani tupu; vidakuzi vitahifadhiwa hadi mwisho wa kipindi } expires= "; expires=" + date.toUTCstring () ; // weka maisha ya kuki } var path = options.path ? "; path=" + (options.path ) : "" ; // weka url ambayo vidakuzi vilivyosakinishwa ni halali var domain = options.domain ? "; domain=" + (options.domain ) : "" ; // weka misheni ya tovuti var safe = options.secure ? "; salama" : "" ; // onyesha ikiwa data inapaswa kusimbwa kwa njia fiche au la document.cookie = [ this .cookieID , "=" , encodeURIComponent(cookieContent) , muda wake unaisha, njia, kikoa, salama] .jiunge ("" ) ; // tengeneza kamba kutoka kwa safu na uandike kwa vidakuzi kurudi kweli; } ; this .get = function () ( // kazi ya kupata vidakuzi var cookieValue = "" ; ikiwa (document.cookie && document.cookie != "" ) ( // ikiwa vidakuzi vinapatikana na vipo var cookies = document.cookie .split (";" ) ; // kugawanyika na kupata safu kwa (var i = 0; i< cookies.length ; i++ ) { // выполняем перебор массива var cookie = jQuery.trim (vidakuzi[ i] ) ; // kukata pedi zote ikiwa (cookie.substring (0 , this .cookieID .length + 1 ) == (hii .cookieID + "=" ) ) ( // pata neno kuki cookieValue = decodeURIComponent(cookie.substring (hii .cookieID .length + 1 ) ; // ilitoa maadili yote mapumziko; } } var properties = cookieValue.split ("," ) ; // gawanya maadili yote katika safu kwa (var i = 0; i< properties.length ; i++ ) { // перебрали массив var property = properties[ i].split (":" ) ; // gawanya kila kipengele na hii [ mali[ 0 ] ] = mali[ 1] ; // aliongeza mali kwa vitu } } kurudi kweli; } ; kurudisha hii; } ; |
HTML itaonekana kama hii:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
"thamani"
Ikiwa kuki haipo, ambayo haijafafanuliwa itarejeshwa, kwa mfano ikiwa ($.cookie("nothing") == null) ( tahadhari("Kidakuzi hakijawekwa!");) |