Kuidas konfigureerida terminaliserveri kaugühendusseansi parameetreid? HTTP-seanss Kliendipäringu saatmine


Seansid PHP-s või saidi külastava kasutaja või kliendi andmed salvestatakse saidi lehtede vahel liikumisel ilma suuremate raskusteta. Õppetund on väga oluline. Asjakohane 95% veebisaitide loomisel.

Mis on seanss php-s

Seansse kasutatakse ajutiste andmete (näiteks selle kohta, et kasutaja on saiti külastanud) salvestamiseks, kui navigeeritakse sama saidi lehtede vahel. Seansside kasutamisel salvestatakse andmed serveri ajutistesse failidesse.
Kõige sagedamini kasutatakse seansse (ja ka küpsiseid) veebipoodide, foorumite, teadetetahvlite, suhtlusvõrgustike, ajaveebi ja muude ressursside loomisel. Seansisüsteemi mugavuseks on sisselogitud kasutaja/kliendi ajutise teabe salvestamine, mille andmed on teatud aja jooksul kiiresti kättesaadavad. Seansil on loomulik aegumiskuupäev – kuni brauseri sulgemiseni. Kui sulgete ainult lehe, siis saidi avamisel on andmed kasutaja/kliendi kohta endiselt saadaval.

Seansi loogika

Seanss (või seanss) on teatud tüüpi ajutine andmesalvestus. Hoiatan kohe, et väikese andmemahu salvestamine on seda väärt. Näiteks külastava kasutaja sisselogimine ja parool või tema seerianumber andmebaasis.

Näide tööst
1. Kasutaja sisestab oma sisselogimise ja parooli ning siseneb saidile
2. Andmed koos sisselogimise ja parooliga salvestatakse ühe saidi lehe seansis:

Fail index.php

Seansi_start(); // iga fail, milles soovite seansi andmeid kasutada, peab koodi alguses sisaldama käsku "start session".

$login = "administraator";
$password = "pääs";
$_SESSION["sisselogimine"] = $sisselogimine; // salvestage sisselogimist sisaldav muutuja
$_SESSION["parool"] = $parool; // parooli sisaldava muutuja salvestamine

3. Kui lähete saidi teisele lehele, on saadaval ka need andmed:

Fail näide.php(või mõni muu leht)

Echo "Teie sisselogimine ".$_SESSION["sisselogimine"]; // kuvab "Sinu sisselogimine on admin", kuigi me ei salvestanud sellele lehele andmeid!
Vaata, see on lihtne!

4. Kui soovite seansiandmeid kustutada, peate tegema järgmist.

Fail näide.php

Seansi_start(); // "alusta seanssi" uuesti

Unset($_SESSION["sisselogimine"]); // nii oli muutuja registreerimata või "hävitatud"
echo "Sinu sisselogimine ".$_SESSION["sisselogimine"]; // kuvab "Sinu sisselogimine". Kuna me hävitasime selle viimasel real, siis andmed puuduvad

Session_destroy(); // seansi hävitamine. Kõik andmed, sealhulgas $_SESSION["parool"], pole enam seal. Nende taotlemisel kuvatakse tõrketeade
Üldiselt sarnaneb selline ülekanne POST-meetodiga, kuid enam ei pea kirjutama palju tarbetut koodi ning kõik lehelt lehele edastatavad andmed salvestatakse serveris ajutistes failides. Kordan veel kord, seansid peaksid sisaldama väikeseid andmeid, nii et need sobivad sisselogimise/parooli, ostukorvi ja muude väikeste mahtude salvestamiseks.

Väärtuse või massiivi edastamine PHP-seansi abil

Seansile saate kirjutada mitte ainult stringi, vaid ka andmemassiivi. Ärge lihtsalt üle pingutage massiivi mahuga, kuna see kõik mõjutab kiirust ja serveris hõivatud ruumi.

Kasutame jällegi kindlat avalehte index.php

Seansi_start();

$r = array("üks", "kaks", "kolm");

$_SESSION["arr"] = $r;

Lehele, kus kõik kuvatakse
Salvestasime seansi andmed ja järgime linki teisele lehele, kus kuvame kõik andmed.

Sihtfail, leht test.php kus me massiivi avame

Seansi_start();
print_r($_SESSION["arr"]);
// prindib
/*
Massiiv
=> üks
=> kaks
=> kolm
*/
?>
Võib-olla soovite teemal põhinevat õppetundi värskendada. Üldiselt peaks kõik selge olema.

Muud funktsioonid seanssidega töötamiseks

session_unregister(string)- seanss unustab määratud globaalse muutuja väärtuse;
session_destroy()- seanss hävitatakse (näiteks kui kasutaja lahkus süsteemist, klõpsates väljumisnupule);
session_set_cookie_params(in eluiga [, stringi tee [, stringi domeen]])- selle funktsiooni abil saate määrata, kui kaua seanss kestab, määrates unix_timestamp, mis määrab seansi surmaaja.

Funktsioonide loend seanssidega töötamiseks php-s
session_cache_expire – tagastab praeguse vahemälu aegumise
session_cache_limiter – hangib ja/või määrab praeguse vahemälu piiraja
session_commit on sessiooni_write_close() alias
session_decode – dekodeerib seansi andmed stringist
session_destroy – hävitab kõik seansi jaoks registreeritud andmed
session_encode – krüpteerib praegused seansi andmed stringina
session_get_cookie_params – hangib seansiküpsise parameetrid
session_id – hangib ja/või määrab praeguse seansi ID
session_is_registered – määrab, kas muutuja on seansis registreeritud
session_module_name – hangib ja/või määrab praeguse seansimooduli
seansi_nimi – hangib ja/või määrab praeguse seansi nime
session_regenerate_id – muudab praegust seansi ID-d äsja genereeritud ID-ga
session_register – registreerib praeguse seansi jaoks ühe või mitu muutujat
session_save_path – hangib ja/või määrab praeguse seansi salvestamise tee
session_set_cookie_params – määrab seansi küpsise parameetrid
session_set_save_handler – määrab kasutaja tasemel seansi salvestamise funktsioonid
session_start – lähtestab seansi andmed
session_unregister – tühistab muutuja registreerimise praegusest seansist
session_unset – vabastab kõik seansimuutujad
session_write_close – kirjutab seansi andmed ja seansi lõpu

Näited sessioonitööst

Lehevaatamiste loendur seansi ajal. Selge näide tööst. Kuid pärast brauseri sulgemist algab loendus uuesti.

Ühe lehe külastuste loendur ühe seansi jooksul

// Lihtne näide küpsisteta seansside kasutamisest.
session_name("test");
session_start();
$_SESSION["count"] = @$_SESSION["count"] + 1;
?>

Loendur


Avasite selle lehe praeguse brauseri seansi ajal
aeg(ad).
Selle loenduri lähtestamiseks sulgege brauser.
Lehe värskendamiseks klõpsake siin!
Iga üleminekuga suureneb loendur 1)

Täname tähelepanu eest! Edu teie ettevõtmistes!

    Tekst/html 19.10.2017 7:51:00 Vektor BCO 0

    WS2012 terminaliserveris istub 13-15 klienti. Virtuaalse masina terminal pöörleb. Eraldi virtuaalmasinas DNS, AD ja DHCP.

    Küsimus nr 1: kuidas konfigureerida ühenduse katkestamise ajapiirangut passiivse seansi ajal?

    Jaotises gpedit.msc Computer Configuration -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Time Limiting Sessions. Kõik parameetrid seal pole täpsustatud. Ja samal ajal, tühikäiguga umbes 20-30 minutit. viskab kõik välja.

    Vaatasin RUNeti kohta palju teavet, kuid ma ei leidnud seda kuskilt WS2012 jaoks, see on saadaval ainult WS2003 jaoks

    Küsimus nr 2: kuidas teha kindlaks, et pärast seansi katkestamist ei sulgu kogu kasutaja jaoks avatud tarkvara?

    Need. Näiteks tuleks kasutaja välja visata 20 minuti pärast, samal ajal kui kogu tema seanss tapetakse ja kui ta uuesti sisse logib, suletakse kõik tema avatud programmid ja dokid. Tegelikult, kui küsimusele nr 1 on vastus, panen kellaaja paika, aga siiski tahaks, et kasutaja pärast iga raseduse katkemist kõike uuesti ei avaks... Saan aru, et see on seotud lapse eluga. seanss, kuid siiski, kas on olemas režiim, mille puhul seanss sureb, kuid selle olek säilib? Ja kui jah, siis kuidas seda konfigureerida?

    Küsimus nr 3: Kas WS2012-s on võimalik serveri sulgemise õigusi piirata?

    Vastasel juhul on kasutajate nuppu Start vajutades paneel plaaditud ja seal on “toite” nupp, st. iga kasutaja võib terminaliserveri kogemata välja lülitada ja kogu töö seiskub.

    Moderaator

    Tekst/html 19.10.2017 11:30:36 Avksentjev Sergei 1

    1 Nii et kogumisomadustes on vahekaart "Session" Seal näete, mida peate seadistama. Või ma ei saanud aru?

    2 Oleneb kuidas kasutaja seansi sulgeb.. Kui keelate ja seadistate, et ei blokeeritud sensorit ei sulgeks, siis jäävad avatud programmid alles.. AGA mulle tundub, et see pole üldse hea mõte... I reboot rasked terminalid kogu aeg öösel nii, et lihtsalt kogu see allesjäänud lahtine prügi oli suletud.

    3 Kui teie kasutajad ei ole administraatorid, siis.. see nupp vaikimisi ainult keelab ja väljub.

  • Tekst/html 23.10.2017 10:51:31 Ivan ja KO 0

    >>Kuidas te terminaliserveri konfigureerisite? Kui teil on RDS-i roll konfigureeritud ja kuni seanss on täielikult suletud (kõigi selle seansi kasutajaprogrammidega).

    >>Kui teil on RDS-roll konfigureeritud

    Ei tea, kust otsida?

    >>kogu konfiguratsioonis on seansi eluiga kuni ühenduse katkestamiseni

    Ei tea, kust otsida?

    >>Kas teil on serveris kasutajaid, kes on administraatorid?

    Jah, administraatorid.

    >>Vaikimisi ei saa tavakasutajad serverit sulgeda. Kuid saate selle nupu poliitikas üldse peita.

  • Tekst/html 23.10.2017 11:00:12 Ivan ja KO 0

    >>Nii et kogumisomadustes on vahekaart “Session” seal on näha, mida pead seadistama.. Või ma ei saanud aru?

    Võib-olla saite õigesti aru, aga ma ei tea, kuidas seda teha, sellepärast ma siia kirjutangi... millegipärast ei leia ma RuNetis juhiseid terminaliserveri seadistamiseks, rollide ja seansside jaoks.

    Kirjutasite kollektsiooni kinnistutesse – kus see on?

    >>Vaadates kuidas kasutaja seansi sulgeb.. Kui katkestad ühenduse ja seadistad, et mitte blokeeritud seanssi sulgema, siis jäävad avatud programmid alles.. AGA mulle tundub, et see pole üldse hea mõte... I taaskäivitage raskeid terminale kogu aeg öösel, et kogu see allesjäänud lahtine prügi oleks suletud.

    Alustuseks pikendaksin lihtsalt seansi eluiga... Ma saan suurepäraselt aru, millest sa räägid, peatatud seanssidel pole mõtet. Ma lihtsalt soovin, et ma teaksin, kus täpselt kõik need asjad on seadistatud...?

    Mul puudub terminaliserveri seadistamise kogemus (varem töötasin selles ainult kliendina), kuigi olen IT-struktuuris olnud pikka aega, kuid pole seda konkreetset ülesannet kunagi teinud. Ja ma ei kirjutaks seda küsimust siia, kui leiaksin Internetist üksikasjalikud juhised, kuidas seda teha ...

  • Tekst/html 23.10.2017 11:13:30 Vektor BCO 0

    >>Kuidas te terminaliserveri konfigureerisite? Kui olete kogu konfiguratsioonis konfigureerinud RDS-i rolli, on seansi eluiga kuni ühenduse katkestamise hetkeni ja hetkeni, mil seanss suletakse täielikult (kõigi selle seansi kasutajaprogrammidega).

    Minu lemmik, kuid minu jaoks väga kummaline küsimus on, kuidas te selle üles seadsite? Arvan, et küsimustest peaks selgeks saama, et mina ei olnud selle paika pannud. Muidu on väga raske seletada, mida ma seadistasin, ja nüüd ma ei tea, kuidas seda muuta... amneesia jne.

    Taaskord ei olnud mina see, kes seda seadistas. Ja sellepärast Ma ei teinud seda, siis on nende seadete oskused selgelt puudulikud. Seega küsin professionaalidelt: kuidas seda teha, palun öelge mulle?

    >>Kui teil on RDS-roll konfigureeritud

    Ei tea, kust otsida?

    >>kogu konfiguratsioonis on seansi eluiga kuni ühenduse katkestamiseni

    Ei tea, kust otsida?

    >>Kas teil on serveris kasutajaid, kes on administraatorid?

    Jah, administraatorid.

    >>Vaikimisi ei saa tavakasutajad serverit sulgeda. Kuid saate selle nupu poliitikas üldse peita.

    Kuidas eemaldada kasutajatelt administraatori õigusi? Kas see on konfigureeritud AD-s või mujal terminaliserveris? Kuidas teha poliitikat toitenupu peitmiseks?

    Tänan teid juba ette mõistva suhtumise eest ja ootan teie vastuseid...

    Teie serveris on tohutult progressiivne tööriist nimega " Serverihaldur"Seal lisatakse/eemaldatakse ja konfigureeritakse rolle/funktsioone. Tutvuge selle tööriista funktsionaalsusega. Vasakul on mõne rolli sätted (installitud). Kui seal on RDS-i üksus, minge selle juurde ja seejärel kogusse Google'i seaded, kuidas WS 2012 r2 terminaliserverit seadistada. Saate otsida järgmiselt: Google -> "Terminal server 2012 r2 samm-sammult juhend".

    Serveris (ja mitte ainult serveris) on ka mega tööriist nimega Arvutihaldus(mitte segi ajada serverihalduriga) leiate selle, kui paremklõpsate nuppu Start.

    Arvutihalduses avage jaotis Kohalikud kasutajad ja rühmad, seejärel rühmad ja seejärel administraatorid ning vaadake, kes seal on ja miks. Viskate välja kõik, kes neid õigusi ei vaja. ja taaskäivitage server (veenduge, et te poleks oma õigusi ära võtnud, vastasel juhul püütakse need hiljem tagasi saada).

    Google'i nupu peitmine -> "Peida sulgemisnupu GPO"

    Minu avaldatud arvamus ei ole Microsofti ametlik seisukoht

    Moderaator

    Tekst/html 25.10.2017 7:51:20 Ivan ja KO 0

    >>Raske oli arvata, et sa ei tea, kuidas serverit hallata, sest reeglina need, kes siia tulevad, vähemalt guugeldavad oma küsimuse enne.

    Googeldasin seda küsimust rohkem kui korra, kirjutasin üleval. Ainult mina guugeldasin venekeelseid allikaid... Mõistlikke artikleid seal praktiliselt pole. Ise nägin, et inglisekeelseid allikaid on, aga minu tehniline inglise keele oskus ei ole piisavalt hea, et 100% õigesti aru saada suurtest artiklitest süsteemi seadistamise kohta nullist, mida ma pole kunagi varem teinud.

    >>Saate otsida järgmiselt: Google -> "Terminalserver 2012 r2 samm-sammult juhend. Google -> "Peida sulgemisnupp GPO

    Ma tean, kuidas Google'it kasutada, kuid ma ei vaja otsingumootori kasutamise koolitust. Miks ma ei vaadanud ingliskeelseid allikaid - kirjutasin üleval... Kui nad ütlevad, et nad ei tea, kuidas terminaliserverit seadistada, ei tähenda see, et inimene ei tea, kuidas guugeldada . Kuid te ei jätnud kasutamata võimalust, nagu 99% IT-spetsialistidest, alustada inimese moraliseerimisest ja Google’ile õpetamisest. Minu jaoks on see IT-infrastruktuuriga inimeste mõistmisel alati olnud ja on probleem. Hea eputamine on rohkem väärt kui raha. Ja seda ei jäta ükski IT-spetsialist, nagu praktika näitab, isegi nii-öelda kolleegidega suheldes mööda.

    Küsiti - kuidas terminaliserverit seadistada? Ja seal on üksikasjalikult selgitatud, mida ja kus on vaja konfigureerida... ja te kirjutate mulle Google'i päringute kohta. Küsisin ühelt mehelt matemaatika kohta ja ta alustas ilmast... nii see välja tuleb. Kõige selle asemel, mida ülal kirjutasid, võiksid anda lühikese vastuse vene keeles, punkt. Jah, te ütlete mulle, et lahendust vajava küsimuse guugeldamine on seotud teemadega. Jah, ja see on tõsi, kuid kui oleksite esimest sõnumit hoolikalt lugenud, poleks seda terminit vaja.

    >>Teie serveris on tohutult progressiivne tööriist nimega "Server Manager".

    Siit võib lugeda moraliseerivat tooni, meelsamini mõõtu võtma mõne kuulsa kohaga, inimese ees. See on nagu prof. poksija näitab algajale, kuidas nokaudi teha, näkku ja ilma ettevalmistuseta... väga kummaline meetod, inimest aidata ja küsimustele vastata.

    Teie ankeet on vene keeles, küsimus oli vene keeles ja soovite saada vastust vene keeles.

    Ilma moraliseerimata – miks te ei guugeldanud? Ja on selline trump nupp Google jne.

    Palju produktiivsem on töötada küsimuste-vastuste stiilis.

    Küsimus: kuidas seda ja teist seadistada? Vastus: mine kohale ja tee nii ja naa.

  • Tekst/html 25.10.2017 8:25:04 Vektor BCO 0

    Peal " küsimus - kuidas terminaliserverit seadistada"Võite vastata 10-15-leheküljeliste artiklitega - see ei ole foorumi formaat. Andsin teile otsingumootoris konkreetsed päringud, mis viivad teid garanteeritud tulemuseni. Samuti on palju teavet venekeelsete ressursside kohta, näiteks Habré jms saitidel, kui sa ei leia, siis vaatad sul ikka halvad välja.

    Selge vastuse saamiseks peate saama selge küsimuse. ma küsisin sult mitte jutlustama küsimus esimeses sõnumis, millele sain vastuse stiilis " Miks sa minult midagi rumalat küsid, seal on selgelt kirjas, et ma ei tea, mis toimub".

    Minu avaldatud arvamus ei ole Microsofti ametlik seisukoht

Seansid PHP-s on mehhanism kliendi arvuti kohta teabe salvestamiseks serveri poolel. Tegelikult ei ole PHP seansid nii keeruline teema, kuid selle mõistmiseks peate teadma, kuidas küpsised PHP-s töötavad. Seega, kui te ei tea, kuidas küpsised PHP-s töötavad, lugege esmalt asjakohast artiklit ja tulge siis siia tagasi.

Sõna seanss on inglise keelest tõlgitud kui seanss, nii et PHP-i seansside tähendus muutub selgemaks, kuid programmeerijad on võtnud kasutusele termini "seansid" ja me kasutame seda selles artiklis.

PHP-s on seansid väga sarnased küpsise mehhanismiga, sama võti => väärtuste paarid, ainult need on salvestatud serveri poolele.

funktsioon session_start().

Peame seansi alustama, selleks on funktsioon session_start(). See funktsioon käivitab seansi või seansi, mida iganes soovite seda nimetada.

Soovitav on kutsuda funktsioon session_start() lehe algusesse, kuid oma näidetes ma seda ei tee.

Massiivi $_SESSION

Seansid on muutujate rühmad, mis on salvestatud serverisse, kuid on seotud ühe unikaalse külastajaga. Jällegi on see võtmepunkt: seansid salvestatakse serverisse.

Tagamaks, et iga külastaja suhtleb oma seansi andmetega, kasutatakse küpsist, mille loomise käsu PHP ise annab, ei pea te selle pärast muretsema. See küpsis on asjakohane ainult serveri jaoks ja seda ei saa kasutada kasutajaandmete hankimiseks.

Serveris salvestatakse seansiandmed tekstifaili ja need on saadaval PHP programmis massiivis $_SESSION. Muutuja salvestamiseks seansis peate määrama sellele massiivi väärtuse.

Hakkame lõpuks kasutama näiteid. Kõik on väga lihtne.

Seansid PHP-s tähendus."; ?>

Nüüd proovime saada väärtust massiivi $_SESSION teises näites.

Seansid PHP-s

Pange tähele, et kui teises näites eemaldame funktsiooni session_start(), ei ole meil juurdepääsu massiivi $_SESSION andmetele.

funktsioon session_id().

Kui seanss on loodud, on teil automaatselt juurdepääs seansi kordumatule identifikaatorile, kasutades funktsiooni session_id(). See funktsioon võimaldab teil nii seansi ID väärtust määrata kui ka hankida.

Seansid PHP-s

Saate vaadata oma brauseri arendaja tööriistaribalt (Chrome'is vajutage Ctrl + Shift + I, seejärel Ressursid ja sealt leiate küpsise), see domeen on seadnud teie brauseri jaoks küpsise nimega PHPSESSID ja umbes järgmise väärtus: "7g5df9rkd1hhvr33lq1k6c72p7".

PHPSESSID väärtuse järgi määrab server teie brauseri ja töötab vastava muutujate komplektiga, mis on skriptile saadaval massiivi $_SESSION kaudu, nagu eelnevalt kirjutatud.

funktsioon seansi_nimi().

Kui funktsioon session_id() võimaldab hankida seansi ID väärtuse, siis funktsioon session_name() võimaldab hankida seansi nime.

Seansid PHP-s

Veelkord funktsiooni session_start() kohta

Nüüd teame rohkem, kuidas seansid PHP-s töötavad, ja peame uuesti naasta funktsiooni session_start() juurde. See funktsioon initsialiseerib praeguse kasutaja seansimehhanismi. Kuidas see täpselt juhtub:

  • Kui kasutaja avas saidi esimest korda, seab session_start() kliendile küpsise ja loob kasutaja ID-ga seotud serveris ajutise salvestusruumi.
  • Määrab praeguse sisestatud ID-ga seotud poe.
  • Kui serveri salvestusruumis on andmeid, paigutatakse need massiivi $_SESSION.
  • Kui register_globals failist php.ini on Sees, muudetakse kõik massiivi $_SESSION elemendid globaalseteks muutujateks.

Seansi kasutamise näide

Nüüd vaatame näidet, mis võimaldab meil seanssidega väikeseid katseid läbi viia.

Seansid PHP-s

Loendur

Olete praegusel seansil lehe avanudüks kord.

Avage näide sellel vahekaardil.

Kõik seansitööd põhinevad massiivil $_SESSION, see on selles näites selgelt näha.

Kui sulgete brauseriakna, seanss lõpeb ja meie loendur nullitakse. Seda seansside käitumist PHP-s saab muuta, pöördume selle probleemi juurde veidi hiljem artiklis.

Seansi lõpetamine

Seansi lõpetamiseks vajame:

  1. Tühjendage massiiv $_SESSION.
  2. Kustutage serveris ajutine salvestusruum.
  3. Kustuta seansi küpsised.

Massiivi $_SESSION saate tühjendada funktsiooni session_unset() abil.

Funktsioon session_destroy() kustutab serveris ajutise salvestusruumi. Muide, ta ei tee midagi muud.

Peate kustutama seansiküpsise funktsiooni setcookie() abil, mida õppisime PHP-s küpsistega töötamise õppetükis.

Seansi lõpetamise näide:

Seansi lõpetamine

Seanss on lõppenud.

Nüüd saate läbi viia katse: käivitage loenduriga näide ühes aknas, suurendage loendurit ja seejärel käivitage näide koos seansi kustutamisega ja värskendage lehte uuesti loenduriga.

Küpsisefaili saate kustutada järgmiselt:

setcookie(session_name(), "", time() - 60*60*24*32, "/")

Veelkord funktsioonide session_name() ja session_id() kohta

Funktsioone session_name() ja session_id() kasutatakse praktikas harva, kuid ma kirjutan neist, sest artikkel peab paljastama PHP-s seansside töömehhanismi.

Saate neid funktsioone kasutada oma seansside nimede ja ID-de määratlemiseks, kuid see pole soovitatav. Kui soovite need määrata, siis kirjutage need funktsioonid argumentidega enne funktsiooni session_start(), nagu allolevas näites:

Seansid PHP-s

Seda näidet kasutades määratakse kõigile kasutajatele sama seansi ID.

Vaatame siin lähemalt: kui käivitada näide funktsiooni session_name() jaotisest (siin on link) erinevates brauserites (näiteks Chrome ja Internet Explorer), siis on igal brauseril oma kordumatu seansi identifikaator . Brauserid salvestavad küpsiseid igaüks oma kausta, nii et funktsioon session_start() võimaldab igal brauseril luua oma kordumatu identifikaatori ja vastavalt sellele luuakse serveri iga brauseri jaoks kordumatu salvestusruum. Seetõttu töötab loenduri näide (see) igas brauseris iseseisvalt.

Kui määrate kõigile kasutajatele sama seansi ID, töötavad nad serveris sama salvestusruumiga. Siin on näide loendurist, mis loendab külastusi erinevatest brauseritest:

100) ( session_unset(); session_destroy(); ) ?> Seansid PHP-s

Loendur nr 2

Avas lehe erinevates brauseritesüks kord.

Avage näide sellel vahekaardil.

Kui kasutate seda näidet, pole tõsiasi, et näete seda seal. Teised külastajad võivad olla juba serveri seansipoes väärtusi muutnud. Ma ei tea, millal server sel juhul salvestusruumi kustutab, nii et kui loendur ületab 100, lõpetan seansi.

Ooteaja määramine

Vaikimisi on seanss "aktiivne", kuni külastaja brauseriakna sulgeb. See on tingitud asjaolust, et funktsioon session_start() asetab sellise küpsise kliendile.

Seansi eluiga saab muuta funktsiooni session_set_cookie_params() abil, siin on selle süntaks.

session_set_cookie_params (int lifetime [, stringi tee [, stringi domeen [, bool turvaline]]])

Praktikas piisab ainult esimese parameetri (eluaeg) kasutamisest, siia kirjutatakse aeg sekundites, mis määrab, kui kaua peaks server pärast brauseri sulgemist seansi olekut mäletama.

Funktsiooni session_set_cookie_params() mõju kehtib ainult skripti töötamise perioodi kohta.

Siin on näide selle funktsiooni kasutamisest:

Seansid PHP-s

Loendur nr 3

Loenduri väärtus:.

Avage loendur sellel vahekaardil.

Kerige loendur üles ja sulgege brauser, 30 sekundi pärast avage see näide uuesti. Teie seanss salvestatakse.

Veebiserver ei hoia kliendiga püsiühendust ning iga päringut käsitletakse uuena, eelnevatega ühenduseta.
See tähendab, et te ei saa jälgida sama külastaja päringuid ega salvestada tema jaoks muutujaid üksikute lehtede vaadete vahel. Nende kahe probleemi lahendamiseks leiutati seansid.
Tegelikult on seansid lühidalt mehhanism, mis võimaldab teil brauserit unikaalselt tuvastada ja loob selle brauseri jaoks serveris faili, kuhu salvestatakse seansimuutujad.

Ma ei kirjelda sellise mehhanismi vajadust üksikasjalikult. Need on õpikujuhtumid nagu ostukorv e-poes, autoriseerimine, aga ka mitte täiesti triviaalsed probleemid, näiteks saidi interaktiivsete osade kaitsmine rämpsposti eest.

Põhimõtteliselt on üsna lihtne teha oma seansside analoog, mis pole nii funktsionaalne kui PHP-sse sisseehitatud, kuid olemuselt sarnane. Küpsiste ja andmebaasi kohta.
Skripti taotlemisel vaatame, kas konkreetse nimega küpsis on vastu võetud. Kui küpsist pole, siis määrake see ja kirjutage andmebaasi uus rida kasutajaandmetega. Kui on küpsis, siis loeme andmed andmebaasist. Teise palvega kustutame andmebaasist vanad kirjed ja nüüd on meil valmis seansimehhanism. See pole üldse raske. Kuid on mõned nüansid, mis muudavad sisseehitatud seansimehhanismi kasutamise eelistatavamaks.

Kui lubatud on ainult esimene, seatakse seansi alguses (iga kord, kui session_start() kutsutakse) kliendi jaoks küpsis. Brauser tagastab selle küpsise iga järgneva päringuga õigesti ja PHP-l on seansi identifikaator. Probleemid algavad, kui brauser ei tagasta küpsiseid. Sel juhul, ilma identifikaatoriga küpsist saamata, alustab PHP alati uut seanssi ja mehhanism ei tööta.

Kui ainult teine ​​on lubatud, siis küpsist ei seadistata. Ja see juhtubki, mille nimel tasub tegelikult kasutada sisseehitatud seansimehhanismi. Kui skript on oma töö ära teinud ja leht on täielikult moodustatud, skannib PHP kogu lehe ja lisab igale lingile ja vormile seansi identifikaatori. See näeb välja umbes selline:
Indeks muutub
Indeks
ja vormidele lisatakse peidetud väli

Ja kui klõpsate mis tahes lingil või vormis nuppu, saadab brauser päringusse meile vajaliku muutuja - seansi identifikaatori!
Arusaadavatel põhjustel lisatakse identifikaator ainult suhtelistele linkidele.

Teoreetiliselt saame küpsiste ja andmebaasi omatehtud seanssides määrata kõigile linkidele ID-ülekande käsitsi – ja siis töötavad meie enda seansid küpsistest sõltumata. Aga kas nõustute – meeldivam on, kui keegi teine ​​seda tööd teeb? ;-)

Vaikimisi on PHP viimastes versioonides mõlemad valikud lubatud. Kuidas PHP sellega hakkama saab? Kokk on alati eksponeeritud. Ja lingid täidetakse automaatselt ainult siis, kui PHP ei tuvastanud seansi identifikaatoriga küpsist. Kui kasutaja külastab saiti selle seansi jooksul esimest korda, asetatakse küpsis ja lingid täidetakse. Järgmise päringu korral, kui küpsiseid toetatakse, näeb PHP küpsist ja lõpetab linkide täitmise. Kui küpsised ei tööta, jätkab PHP linkidele ID õigesti lisamist ja seanss ei lähe kaotsi.
Kasutajad, kellel on küpsised lubatud, näevad pikka linki ID-ga ainult üks kord.

Pheh. ID ülekandmine on lõpetatud.
Nüüd jääb üle vaid andmefail sellega serveri poolel siduda.
PHP teeb seda meie eest. Piisab ainult kirjutamisest
session_start();
$_SESSION["test"]="Tere maailm!";

Ja PHP kirjutab testmuutuja selle seansiga seotud faili.
Siin on väga oluline märkus.
Massiivi $_SESSION on eriline.
Tegelikult sisaldab see muutujaid, mida soovime erinevates skriptides kättesaadavaks teha.
Muutuja seansi paigutamiseks määrake see lihtsalt massiivi elemendile $_SESSION.
Selle väärtuse saamiseks avage lihtsalt sama element. Allpool on näide.

PHP tegeleb ka prügiveoga – eemaldab aegunud failid. Nagu ka andmete kodeerimine ja hunnik muud vajalikku. Selle hoolduse tulemusena on seanssidega töötamine väga lihtne.
Siin jõuame tegelikult näiteni, kuidas seansid toimivad.
Väga väike näide:
session_start();

echo "Sa uuendasid seda lehte ".$_SESSION["counter"]++." korda.";
kaja"
värskenda";
?>

Kontrollime, kas meil on seansis loenduri muutuja, kui mitte, siis loome selle väärtusega 0, seejärel kuvame selle väärtuse ja suurendame seda ühe võrra. Suurenenud väärtus kirjutatakse seansse ja järgmisel korral, kui skripti kutsutakse, on muutuja väärtus 1 jne.
Kõik on väga lihtne.

Saidi mis tahes lehtede seansimuutujatele juurdepääsu saamiseks peate iga faili, milles vajame seansse, algusesse kirjutama AINULT ÜHE (!) rea:
session_start();
Seejärel pääsete juurde massiivi $_SESSION elementidele. Näiteks volituse kontroll näeks välja umbes selline:
session_start();
if ($_SESSION["volitatud"]<>1) {
header("Asukoht: /auth.php");
väljumine;
}

Muutujate eemaldamine seansist.
Kui teil on register_globals=off , siis lihtsalt kirjutage
unset($_SESSION["var"]);
Kui mitte, siis lähedal Ma pean temaga kirjutama
session_unregister("var");

Kõige tavalisemad vead, mida PHP seanssidega töötamisel tekitab, on järgmised:
Kaks neist
Hoiatus: seansiküpsist ei saa saata – päised on juba saadetud
Hoiatus: seansi vahemälu piirajat ei saa saata – päised on juba saadetud

põhjustatud samal põhjusel, on lahendust kirjeldatud selles lõimes
Kolmandaks
Hoiatus: open(/tmp\sess_SID, O_RDWR) nurjus: real_script_path rea numbril sellist faili või kataloogi (2) ei ole(varem nägi ta välja nagu Hoiatus: seansi andmete (failide) kirjutamine ebaõnnestus. Veenduge, et sessiooni.save_path praegune säte on õige (/tmp)),
inglise keelest tõlgituna selgitab see probleemi üksikasjalikult: php.ini määratud kataloogi tee, kuhu seansifailid kirjutatakse, pole saadaval. Seda viga on kõige lihtsam parandada. Lihtsalt registreerige kataloog, mis on olemas ja mida saab kirjutada, näiteks
session.save_path = c:\windows\temp
Ja ärge unustage pärast seda Apache'i taaskäivitada.

Nagu selgub, pole inimese intelligentsusel piire ja seetõttu olen sunnitud selgitama:
teade kolmanda vea kohta (kataloogi ei leita) viib PARATAmatult kahe esimese ilmumiseni, kuna veateade väljastatakse brauserisse ja päistesse pärast seda, kui seda ei saa kasutada. Seetõttu ärge kiirustage ennatlikku järeldust otsima, vaid kirjutage enne üles õige tee!

Järgmine levinum probleem seanssidega töötamisel on registri_globals raske pärand. ÄRGE andke skriptimuutujatele nimesid, mis ühtivad massiivi $_SESSION indeksitega!
Register_globals=on korral kirjutavad väärtused üksteist üle ja sa lähed segadusse.
Ja kui register_globals=off, kuvatakse järgmine tõrge: "Teie skript tugineb tõenäoliselt seansi kõrvalmõjule, mis eksisteeris kuni PHP 4.2.3." Kui skriptil on seansimuutuja, millel pole väärtust, ja globaalne muutuja koos sama nimi. Sellest vabanemiseks tuleb muutujad alati enne kasutamist initsialiseerida (või vähemalt nende olemasolu kontrollida) ning mitte anda globaalsetele muutujatele nimesid, mis ühtivad massiivi $_SESSION indeksitega.

Kui see ei tööta, kuid sõnumeid ei kuvata, lisage skripti algusesse kaks rida, mis vastutavad KÕIKIDE vigade kuvamise eest ekraanil - on täiesti võimalik, et vigu on, kuid te lihtsalt ei näe neid.
ini_set("kuva_vead",1);
error_reporting(E_ALL);

või vaadake vigu failis error_log. Üldiselt jääb veateadete kuvamise teema sellest artiklist välja, seega veenduge, et näete neid vähemalt. Vigade leidmise kohta saate veidi rohkem lugeda sellest jaotisest.

Kui olete kindel, et vigu pole, kuid antud näide nagunii ei tööta, siis võib-olla ei luba PHP URL-i kaudu ID-d edastada, ja küpsised millegipärast ei tööta.
Vaata, mis su küpsistega viga on.
Üldiselt, kui teie seansid ei tööta, proovige esmalt seansi identifikaator käsitsi edastada, st looge link ja määrake sellele identifikaator:
session_start();
if (!isset($_SESSION["loendur"])) $_SESSION["loendur"]=0;
echo "Uuendasite seda lehte ".$_SESSION["counter"]++." korda.

värskenda";
?>

Siiski peaksite veenduma, et direktiiv session.use_only_cookies pole lubatud, mis takistab PHP-l seansi ID-d aktsepteerimast, kui see edastati URL-i kaudu

Kui see näide ei tööta, siis on probleem tühine kirjavead(pooled seanssidega seotud "probleemidest" tulenevad valesti kirjutatud muutuja nimest) või PHP liiga vanas versioonis: seansside tugi ilmus versioonis 4.0 ja massiiv $_SESSION - versioonis 4.1 (enne seda kasutati $HTTP_SESSION_VARS ).
Kui see töötab, on probleem küpsistes. Jälgige, millise küpsise server brauserile seab ja kas brauser selle tagastab. Väga kasulik on otsida, vaadates HTTP-päiste vahetust brauseri ja serveri vahel.
Küpsiste toimimise selgitus jääb selle niigi liiga pika teksti raamidest välja, kuid veenduge vähemalt, et server saadaks identifikaatoriga küpsise ja brauser tagastaks selle. Ja samas kattuvad identifikaatorid omavahel =)
Küpsise seadmine peaks välja nägema
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6;
või kuidas
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; tee=/
(kui te ei taotle skripti juurkataloogist)
Serveri vastus peaks välja nägema selline
Küpsis: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6
või
Küpsis: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; b=b
kui brauser tagastab muid küpsiseid peale seansi ID.

Kui brauser küpsiseid ei tagasta, kontrollige, kas küpsised üldse töötavad.
Veenduge, et kasutataval domeenil on tavaline nimi (vähemalt ühe punktiga ja ilma keelatud tähemärkideta, nagu allkriipsud) ja tühjendage brauseri vahemälu – need on kaks peamist põhjust, miks küpsised ei pruugi töötada.

Kui siit toodud näide töötab, aga sinu enda kood mitte, siis ilmselgelt pole probleem seanssides, vaid algoritmis. Otsige üles, kuhu te muutuja kaotasite, kandke näide siit samm-sammult üle ja siluge skript.

Teine probleem võib tekkida siis, kui kasutate päise ümbersuunamist või JavaScripti navigeerimist.
Fakt on see, et PHP lisab automaatselt seansi identifikaatori ainult sellistele linkidele nagu
, kuid ei tee seda päiste, JavaScripti ja metasiltide puhul.
Seetõttu peate identifikaatori käsitsi lisama, näiteks järgmiselt:
header("Asukoht: /script.php?".session_name()."=".session_id());

Samuti on väga haruldane probleem ja on täiesti ebaselge, kust see pärineb, et seadistusel session.save_handler on failidest erinev väärtus. Kui see nii ei ole, parandage see.

Ohutus
Seansi turvalisus on lai teema. Seetõttu keskendun mõnele põhipunktile.
Kõige õpikum on mitte lasta identifikaatorit läbi aadressiriba. See on kirjutatud isegi failis php.ini, kuid see piirab seansside funktsionaalsust. Kui otsustate seda nõuannet järgida, ärge unustage lisaks session.use_trans_sid = 0-le ka session.use_only_cookies = 1
Soovitav on seanss siduda IP-aadressiga: nii ei saa identifikaatori varastamise korral kaabakas seda enamikul juhtudel kasutada.
Soovitatav on kasutada käskkirja session.save_path, mis võimaldab seansifailide salvestamiseks määrata oma kataloogi. See on turvalisem kui nende salvestamine serveri vaikimisi jagatud ajutisse kataloogi.

Lisainformatsioon:

  • Lisaks küpsistele saadab seansimehhanism ka päiseid, mis keelavad lehe vahemällu salvestamise (sama vahemälu piiraja). HTML-i jaoks on see õige ja vajalik. Kuid kui proovite saata faili autoriseerimist kontrolliva skripti abil, keeldub Internet Explorer seda alla laadimast. Selle pealkirja pärast. Helistama
    session_cache_limiter("privaatne");
    peab enne seansi alustamist probleemi lahendama.
  • Nii kummaline kui see ka ei tundu, ei saa te kasutada numbrilisi indekseid massiivi $_SESSION - $_SESSION, $_SESSION["10"] - seansid ei tööta.
  • Kuskil versioonide 4.2 ja 5.0 vahel ei olnud ini_set() abil võimalik seada session.use_trans_sid. Alates 5.0-st on see juba taas võimalik.
  • Enne küpsise versiooni 4.3.3 saatis PHP küpsise ainult siis, kui seansi alguses ei olnud päringus identifikaatorit. Nüüd saadetakse küpsis iga kord, kui kutsutakse session_start().

    Seansside abil autoriseerimise näide
    Illustreerime kõike ülaltoodut väikese näitega:
    Loome faili auth.php:
    if (isset($_POST [ "auth_name" ]))
    {
    $sql = "SELECT * FROM kasutajatest WHERE name=?s";
    $rida = $db -> getRow($sql, $_POST["auth_name"]);
    if ($row && password_verify ($_POST [ "auth_pass" ], $row [ "pass" ])) (
    $_SESSION [ "kasutaja_id"] = $rida [ "id"];
    }
    header("Asukoht: http://" . $_SERVER [ "HTTP_HOST" ]. $_SERVER [ "REQUEST_URI" ]);
    väljumine;
    }

    if (isset($_GET [ "action" ]) AND $_GET [ "action" ]== "logout" ) (
    session_start();
    session_destroy();
    header("Asukoht: http://" . $_SERVER [ "HTTP_HOST" ]. "/" );
    väljumine;
    }

    if (!isset($_SESSION [ "kasutaja_id" ])) (
    ?>








    väljumine;
    }

    Nüüd pole vaja muud teha, kui kirjutada rida kõikidesse kaitstud skriptidesse
    nõuda "auth.php";
    See näide eeldab, et seanss on juba alanud ja ühendus andmebaasiga on loodud klassi abil turvaliseks ja mugavaks MySQL-iga töötamiseks. Samuti eeldatakse, et parool on räsitud, kasutades soovitatavat funktsiooni password_hash.
    Kaitstud faili näide:

    session_start();
    sisaldama "safemysql.class.php" ;
    $db = uus safemysql ([ "db" => "test" ]);
    sisaldama "auth.php" ;
    ?>
    saladus

    Logi välja

    OPS! Väga kasulikud lingid:
    http://www.php.net/manual/ru/ref.session.php – uusim ja värskeim teave PHP seansi toe kohta ametlikus dokumentatsioonis ning arvukad kasutajate kommentaarid. Väga soovitatav lugemine.
    http://phpclub.ru/manrus/f/ref.session.html – selle peatüki VÄGA vananenud tõlge vene keelde, Aleksandr Pyramidini tõlgitud dokumentatsioonist.
    http://phpclub.ru/detail/article/sessions
    Artikkel haletsusväärse pealkirjaga "Tõde seanssidest". Jätab ambivalentse mulje. Alguses räägib autor VÄGA selgelt seansimehhanismist, kuid tema poolt artikli lõpuks pakutavad meetodid on täiesti ebaselged.

    Dmitri Borodini õpikuartikkel saidilt
    http://php.spb.ru/ EI OLE tungivalt soovitatav.
    Poisid, see on kohutavalt aegunud. See ei sisalda mitte ainult faktilisi ebatäpsusi, vaid PHP seanssidega pole lihtsalt pikka aega tööd tehtud.
    Suur tänu Dimale selle eest, see oli esimene venekeelne artikkel seansside kohta, õppisin sellest ise, aga nüüd pean selle väljateenitud puhkama saatma.
    Kahjuks on aegunud ka paljud teised artiklid Internetis, mida pole aastaid uuendatud.

  • Mis on seanss?

    Arvutitehnoloogias, eriti võrgunduses, on seanss peaaegu pidev interaktiivne teabevahetus, mida nimetatakse ka ühenduseks või dialoogiks kahe interakteeruva seadme või kasutaja ja arvuti vahel (vt teemat Identifitseerimisprotseduur). Seanss luuakse kindlal ajal ja lõpetatakse teatud aja möödudes. Loodud seansi ajal edastatakse igas suunas rohkem kui üks sõnum. Tavaliselt on seanss stabiilne, see tähendab, et vähemalt üks suhtlev osapool peab salvestama teavet seansi ajaloo kohta, et säilitada teabevahetuse võimalus, erinevalt kodakondsuseta teabevahetusest, mille sisuks on sõltumatute päringute vahetamine. ja vastused.

    Ühenduseansid võivad olla osa protokollidest või teenustest OSI mudeli rakenduskihis, seansikihis või transpordikihis.

    Ruuter kasutab seansi teabe salvestamiseks seansi tabelit. Tabel võtab osa mälu- ja protsessoriressursse selliste funktsioonide jaoks nagu seansside loendamine. Seansi suurus tabelis on fikseeritud; kui see ületab, ei saa ruuter teavet edastada isegi siis, kui on olemas väljundandmevoog.

    Proovime selgitada seansi eesmärki järgmiste näidete abil.

    1. Kui avate veebilehe, näiteks www.. Kõik toimub vaid minutiga, seega ei pea te oma internetiühenduse kiiruse pärast muretsema. Aga miks on siis nii palju seansse vaja? Sait sisaldab erinevat teavet - palju pilte, videoid. Lehe brauseris avamiseks peate need alla laadima oma arvuti ajutisse kausta.

    2. Kui laadime alla BT kaudu, nõuab see palju seansse. Lähtestamise ajal on vaja umbes 2000 seanssi, kuid nende arv väheneb stabiilse laadimise korral. Allolev seansiloend näitab praeguste seansside arvu vastaval BT kaudu sissetuleva ja väljamineva allalaadimiskiirusega.

    See juhtub ka muu P2P-tarkvara kasutamisel, kuna need töötavad sarnaselt.

    Pange tähele, et kiiruse ja seansside arvu vahel pole selget seost. Kui teil on palju seansse, ei ole kiirus alati suur, nii nagu suur kiirus ei tähenda suurt seansside arvu. Kuid põhimõtteliselt, kui seansse on palju, on kiirus suurem.

    Miks määrata seansi limiit?

    1) See väldib võrgu aeglustumist, kuna P2P-tarkvara seansside arv on piiratud.

    2) See võimaldab teil vältida võrguressursside neelamist mis tahes viiruste või muud tüüpi võrgurünnakute poolt, mis nõuavad suurt hulka seansse.

    Kuidas ruuteris seansipiiranguid seadistadaTP- LINK ?

    Samm 1

    Avage brauser ja sisestage aadressiribale ruuteri võrgu IP-aadress; vaikeväärtus on 192.168.1.1, seejärel vajutage sisestusklahvi.

    2. samm

    Veebiliidese sisselogimiseks sisestage oma kasutajanimi ja parool; Vaikimisi on nii sisselogimine kui ka parool admin.

    3. samm

    Klõpsake lehe vasakus servas nuppu Seansi piirang -> Seansi limiit, lubage funktsioon Seansi limiit, seejärel klõpsake sätete salvestamiseks nuppu Salvesta.

    4. samm

    Seansipiirangu reegli konfigureerimiseks klõpsake nuppu Lisa uus, sisestage selle arvuti võrgu IP-aadress, millele soovite piirangu seada, ja määrake seansside maksimaalne arv (maksimaalne seanss).

    Märge

    Max Session on konkreetse arvuti individuaalne limiit, isegi kui sisestasite võrguaadresside massiivi.