Jump to content
php.lv forumi

cookies


H1v3r

Recommended Posts

man ir lapa kuraa ir includota vel viena lapa ar poll skriptinju (tipa labajaa mlaa stav balsoshana). Vienreiz nobalsojot tiek labajaa malaa uzraadiiiti rezultaati. Kad lapu parlade vai uzspiezh uz kada linka taa atkal piedava balsot. Ka vareetu uztaisiit lai pec vienreizejas balsoshanas uzraada rezultatu vislaik .. nu vismaz liidz browsera aizvershanai. Megjinaaju ar cookies , bet man meta erroru aaraa kaut kaadu saistiitu ar headers. :( Kadi padomi ?

Link to comment
Share on other sites

Nuu, iemet to skriptu pirms <head> daljas. Ar cookijiem neesmu iipashi njeemies, bes sesijas darbojas tikai tā. Kameer headera infa veel nav nosuutiita.

Ja veelies, lai nevar balsot liidz paarluuka aizveershanai - lieto sesijas. Ar cookijiem no viena datora ierobezhot[liidz briidim, kameer kaadz izdzeesh cookijus [pats taa esmu dairijis]]. Lai pilniibaa ierobezhotu - vari pieziimeet IP un tad naakamaa reizee paarbaudiit vai ir balsojis no taas IP vai nee. --> rezultaatu Sesijaa un skriptu, lai esntaas reizes netiktu veikta paarbaude, kameer cilvis vazaajas pa tavu lapu.

 

Nu taa - tas mans viedoklis.

 

Piemeers sesijaam

session_start(); // Kaut kur pašā koda sākumā - pirms head daļas

if (isset($_SESSION[balsojums])){ echo 'Tu jau esi balsojis';
-->Balsojuma rezultāti<--
}
else {
$balsojums=$_GET['balsojums'];
$_SESSION[balsojums]=balsojums;
-->Tas, ko tu gribi ar rezultātu izdarīt<--
-->Balsojuma forma<--
}

Praktiski tas pats ir ar Cookies.

 

Nu kkaa taa... (:

Link to comment
Share on other sites

orion, nemāci citiem muļķības. viņš tev prasīja par cookies, tad atbildi par cookies.

 

ja tev dzied par cookies erroru, tas nozīmē, ka tu esi nosūtījis lietotājam html kodu pirms šīm darbībām ar cookies.

 

Sīkdatnes (cookies) ir jānosūta lietotājam pirms jebkāda html koda ģenerēšanas, jo sīkdatnes tiek ievietotas tam HTML kodam priekšā un pārlūkprogramma jaunās sīkdatņu vērtības meklē tikai HTML koda priekšā. Ja tu sūti kaut kur HTML koda vidū, pārlūkprogramma tās vairs nemeklē. Tāpēc PHP tev saka priekšā, ka nav vērts sūtīt, jo pārlūkprogramma to nesapratīs.

 

Lai nosūtītu sīkdatnes pirms jebkāda HTML koda sūtīšanas, iespējami divi varianti:

 

ideālais variants: vispirms veicam visas operācijas, kas nav saistītas ar HTML koda ģenerēšanu, tai skaitā, nosūtām sīkdatnes; pēc tam sākam ģenerēt HTML kodu.

 

iesācēju variants: rakstām kā gribam, tikai koda sākumā ievietojam rindiņu ob_start(); šī rindiņa pasaka PHP, ka izdrukātais HTML kods nav uzreiz jāsūta pārlūkprogrammai, bet gan tikai tad, kad tu to norādīsi. Ja tu to speciāli nenorādīsi (skaties http://php.lv/ob_start), tad tas notiks PHP koda izpildes beigās. Līdz ar to, ja tu HTML koda ģenerēšanas vidū uztaisīsi setcookie(...), tad kļūdas nebūs, jo PHP varēs noformēt sīkdatni pirms HTML koda!

 

Kad uzstādi sīkdatni, tad jālieto sekojošs pieraksts:

setcookie('nosaukums','vērtība','laiks, cikos kļūt nederīgam','taciņa, kur tas ir spēkā');

 

Ja man vajadzētu glabāt cookie uz 1 minūti, es rakstītu:

setcookie('kukijs','vērtība',time()+60,'/');

 

Saproti, no kurienes tas +60? Tas ir pašreizējam laikam pieskaitītas desmit sekundes.

 

Jāzina viena lieta: kad kukijus glabā ar setcookie, tad $_COOKIE masīvā tos nemaz nevar uzreiz nolasīt! Tos var nolasīt tikai pēc vienas lapas pārlādes, jo tāds ir sīkdatņu princips - vispirms tās tiek uzstādītas uz lietotāja lapas un tikai tad, ja lietotājs nākamreiz pieprasot lapu, tās nosūtīs tev, tad tu iegūsi $_COOKIE masīvā attiecīgo vērtību. Piemēram, ja lietotājam nebūs atļauta sīkdatņu uzstādīšana, tad arī nākamreiz tu neko tai $_COOKIE masīvā nedabūsi.

 

Es parasti pēc setcookie() vai nu ielieku attiecīgu vērtību ar rokām $_COOKIE masīvā vai arī (daudz labāks veids) veicu redirektu (tā, ka lietotājs vēlreiz pieprasa manu lapu un līdz ar to nosūta sīkdatnes man) ar šo rindiņu:

 

header('Location: skripts.php');

 

Šo funkciju arī nevar izsaukt, ja esi jau nosūtījis pārlūkprogrammai HTML kodu. Tāpēc lieto ob_start() visu kodu sākumā.

Link to comment
Share on other sites

orion, nemāci citiem muļķības. viņš tev prasīja par cookies, tad atbildi par cookies.

Jams prasīja veidu, kā to izdarīt. Pats bija mēģinājis ar cookies. Mana daļa - piedāvāt.

baidevei - cepumus uzlikt arī bez setcookie();

Vismaz man un uz viena cita serva darbojas

$_COOKIE[balsojums]=$balsojums;

Edited by orion
Link to comment
Share on other sites

Tāda sīkdatne būs spēkā tikai līdz pārlūkprogrammas aizvēršanai. Aizveram pārlūkprogrammu, ejam atkal iekšā un še tev - balsojam vēlreiz.

Link to comment
Share on other sites

...

Ja man vajadzētu glabāt cookie uz 1 minūti, es rakstītu:

setcookie('kukijs','vērtība',time()+60,'/');

 

Saproti, no kurienes tas +60? Tas ir pašreizējam laikam pieskaitītas desmit sekundes.

...

Neņem ļaunā Jāzep, bet 10 != 60 :) Ļoti labi smiekli uznāca :)

Link to comment
Share on other sites

  • 8 months later...

Xe, ļoti vecu topku uzgāju, bet tā kā mana problēma ir apmēram šīs pašas turpinājums, tad varbūt rakstīšu te.

 

Lieta tāda, uztaisīju vienkāršu autorizāciju ar cookies. itkā viss strādā, bet problēma rodas kad to darbinu tā kā to ir plānots darbināt - mans skripts tiek ar iframe ievietots citā skriptā, kas atrodas uz cita servera. un šajā variantā man nekādi neizdodas izveidot to cookie.

 

sākumā domāju, ka izveidotais cookie netiek ņemts vērā (netiek atrasts), jo setcookie() parametrs domain ir atšķirīgs kopējai lapai un manam skriptam un mēģināju norādīt gan vienu gan otru domain, bet tas tomēr šķiet kaut kā neloģiski, turklāt tad tiktu izveidots cookie un pēc tam serveris to neatrastu, bet man šķiet, ka palaižot caur iframe nekāds cookie netiek izveidots.

 

Vai varētu būt, ka vaina ir tajā, ka pārlūkā jau tiek iedrukāta daļa lapas pirms tiek pieprasīts mans skripts caur iframe? ja jā, tad kā šo lietu varētu risināt? vai arī tur var būt arī kāda cita vaina? to skriptu, kurā tiek ielādēts manējais, es pats netaisu, tāpēc ir pagrūti tajā kaut ko pamainīt. bez tam iframa jebkurā gadījumā tiks ielādēts tikai pēc tam, kad pārlūkam jau būs iedoti paša iframe tagi, tātad kaut kas jau lapā būs iedrukāts.

 

ir kādas idejas?

 

P.S. šķiet, ka uz firefox viss strādā, tātad problēma rodas ar internet explorer. citos pārlūkos netestēju, bet tie man nav sevišķi aktuāli...

Link to comment
Share on other sites

Man pollus maaciija taisiit taa, lai nevareetu nobalsot divreiz no vienas ip adreses. Tipa kad cilveeks nobalso, vinja ip tiek saglabaata. pirms, pievienot balsi ir paarbaude vai taa ip jau nav sagalabaato ip sarakstaa, ja ir tad izmet zinju "sorii veciit jau esi basojis" ja nav, tad " paldies, balss pienjemta", reultaati un ip tiek ierakstiita saraksta galaa. vispaa labi ir, kad ip tiek parbaudiita jau ielaadeejot lapu un veelreiz iespeeju balsot nemaz nepiedaavaa, bet uzreiz raada rezultaatus.

 

un nekaadas kuukas balsoshanai nebija nepiecieshamas.

Edited by Ugabuga
Link to comment
Share on other sites

offt: par pooliem, nu lai tak dzees cepumus un balso vairaakas reizes, vismaz cilveks ir portaalaa un kaut ko dara. bet ja nu tiesam mega svariigu lietu vajag ar puulu izlemt, tad jaataisa pools tikai registretajiem useriem, jo nav cita veida peec kaa viennoziimigi identificeet lapas apmekletaju un pateikt ir/nav balsojis.

Link to comment
Share on other sites

par pooliem jāpiekrīt v3rb0

 

bet tagad par tēmu:

uz netscape un firefox jau viss strādāja

uz IE caur iframe cepums netika izveidots, bet tas tagad ir atrisināts

vēl aizvien neiet uz Operas

 

par IE problēmu (no php.net):

 

IE 6 features an inadequate definition of third party cookies.

If your site is hosted on server A and your PHP stuff is coming in a framesetting from server B your setcookie-attempts will be blocked when default privacy settings are deployed. Your secondparty-cookie will be regarded as a thirdparty-cookie.

 

So what you do is not read the P3P-Internet Explorer 6-manual at MS but send a header like

 

header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');

 

before doing the setcookie-thing. This will enable your cookie to survive any IE-6 privacy settings.

 

tātad tā rinda ar header tiešām palīdzēja. nezinu tikai ko tie visi parametri nozīmē, jo neesmu informēts kas ir tas P3P (Platform for Privacy Preferences (P3P) Project), zinu tikai, ka to developē W3C (World Wide Web Consortium) :P

 

un tātad vaina bija tajā, ka stulbais microsoft netikdams galā pats ar saviem drošības caurumiem iekš IE ir uztaisījis tā, ka caur iframe u.tml. ielādētu skriptu cepumi skaitās thirdparty-cookie, jeb outsideri kurus jāiznīdē :angry:

Link to comment
Share on other sites

×
×
  • Create New...