Jump to content
php.lv forumi

Sesiju glabāšana datubāzē..


Trac3 !!

Recommended Posts

Lietas, kas uzreiz ienāca prātā.

 

Plusi glabāšanai bāzē:

* Neglabājas failu sistēmā - tādēļ lielākoties atkrīt visas drošības problēmas, kas saistītas ar sesijas datu nolasīšanu caur failu sistēmu (kas ir iespējama slikti nokonfigurēta servera gadījumā).

* DB ir piemērotāka sadalītai sistēmai - līdz ar to sesijas ir vienkāršāk padarāmas pieejamas vairākos fiziskos web-serveros vienlaicīgi slodzes dalīšanai

* DB ir potenciāli ātrāka datu apmaiņai (te gan ir jāizvērtē, jo savienojuma nodibināšana un pārtraukšana prasa laiku)

Mīnusi glabāšanai bāzē:

* Jārūpējas par datu validāciju, lai nepieļautu DB līmeņa drošības pārkāpumus (SQL injekcijas, piemēram)

* Atkarībā no realizācijas sanāk, ka zinot DB lietotāju un paroli ir iespējams daudz vienkāršāk iegūt _visu_ sesiju datus. (SELECT * FROM sesijas). Vieglāk pat nekā pie glabāšanas failu sistēmā.

Link to comment
Share on other sites

* Par datu validāciju jārūpējas jebkurā gadījumā...

* Ja iegūst db jūzeri un paroli, tad var ne tik to vien redzēt datubāzē... Jūtīgos sesijai nepieciešamos datus (piemēram, paroli - kaut gan to nevajag ilgāk glabāt) var pārvērst par hash un salīdzināt. Var datus datubāzē slēpt kaut kā aizkodējot... Protams, tas nekādu drošību negarantē, bet arī ne pārskatamību. Galu galā šīs ir datubāzes menedžmenta problēmas lielākoties.

 

Pie plusiem:

* Fakts, ka sesiju var vairāk kontrolēt un izveidot "advancētāku", ja glabā datubāzē...

Link to comment
Share on other sites

Var aizrauties ar paranoju, bet ja datubāze ir svarīga, nevis kaut kāda "vakara ziņu" krātuve, tad arī ir jābūt cilvēkam, kas nodarbojas ar datubāzes menedžmentu... Principā tas nav profesionāla web programmētāja lauciņš (nevar būt eksperts php, eksperts javascript,css un eksperts vēl datubāzēs). Ja domā, ka "eksperts" visur, tad patiesībā - labākā gadījumā viduvējība visur.

Tur tas cilvēks varētu arī uzturēt datubāzi un programmēt storētās procedūras. Protams, ja ir vēlme un azarts, lēnā garā var darīt to pats (saviem projektiem...)

Link to comment
Share on other sites

Ja sistēma ir svarīga, tad tās izstrādē piedalās īpašs paranojas eksperts, nevis tikai DBA. Uzskatīt, ka produkcijas sistēmā tiek veidotas, mainītas un dzēstas funkcijas un procedūras (ka vispār tiek veiktas kādas nedokumentētas izmaiņas) bez iepriekšējas testēšanas vispirms izstrādes, tad testa un visbeidzot akcepta vidē ir ļoti nenopietni.

 

Bet kā jau teica bubu - šī tēma ir par sesiju glabāšanas failos vai DB izvērtēšanu.

Link to comment
Share on other sites

Pirmkāŗt, zināma prbl. šajā gadījumā ir linux distru pačotā source, piem ķeska ar Ubuntu:

https://bugs.launchpad.net/ubuntu/+source/php5/+bug/316441

Rezumējot: expairējušās sesijas netiek dzēstas. Sanāk diezgan daudz kopā junk datu db.

Otrkārt, DB levelā privilēģijas bieži vien ir vieglāk enforcēt kā failsistēmas levelā.

Treškārt, DB var klasterēt, skeilot labāk nekā failsistēmu. Ja aplikācija ir deployota uz vairākiem serveriem, sesiju šeirošana ar FS ir PITA ar visiem NASiem/SANiem utt.

Ceturtkārt, ja vien nenotiek baisa nelaime, ja sesija pēkšņi pazūd, tad memcached ir labākais un ātrākais variants. (Skeilošana, HA utt).

Piektkārt, PHP bai default sesijas glabā failos, dīvaini serializētā formā (php.net/session_encode), php.ini norādītā dirā, kur faila nosaukums sakrīt ar sesijas id. Daži freimworki, piem. Horde un CodeIgniter ir izgudrojuši riteni no jauna un ir savs sesiju mehānisms, nevis PHP iebūvētais. Principā augstāk rakstītais varētu atbilst arī jamo implementācijām, kaut gan neesmu jamās iedziļinājies un neredzu iemeslu, kādēļ jamās ir rakstītas.

Link to comment
Share on other sites

tikai atceraties, ka sess-db ir vēl viens papildus SQL uz DB.. un ja dati nav serializēti, tad vēl vairāk datu pumpēšanas [serveri jāatvel resursi uz katru pieprasījumu un t.t.]

 

Un nav jau nekādas problēmas šārot sessiju folderi tīklā... ja jau webs ir tik liels un klāsterēts, tad gan jau arī normāli sakonfigurēts. Pats par sevi saprotams.

 

Es, piem., izvairītos no DB slogošanas.

Link to comment
Share on other sites

un kas tas būtu? reāls piemērs, lūdzu?

Varbūt varētu būt kāda oline spēle?,.. bet anyway - vieglāk to uzreiz glabāt kādā normālā veidā iekš DB un t.t.

 

Ja grib kaut ko kopā salāgot, jāuztaisa interfeiss.. kaut vai starptabula. nevis rakņāties pa sessijas datiem, kas ir php-only darīšana (pofig, ka tikai read-only), un nav svarīgi DB/faili... Sessija domāta lietotājam tekošie settingi uz servera. Man piem. nepatiktu, ka kāda programma ložņātu pa sessijas datiem.

 

(Un)Serializācijas algoritmu nemaz nav tik grūti uzrakstīt.

 

Galu galā ir labs teiciens - labāk neaiztikt to, kas strādā daudz maz normāli un stabili. Pārbaudītas vērtības, kā saka.

Link to comment
Share on other sites

Reāls piemērs - lietotāja autentifikācijas pārbaude, lai tiktu klāt *.iso failam, kur autentificējamies caur PHP aplikāciju, bet iso failu mums servē pa taisno apache, kas pārbauda vai lietotājam ir tiesības piekļūt failam ar Apache moduli.

 

Protams, katra jauna konstrukcija sarežģī dzīvi, taču ja jāsaintegrē kopā vairākas dažādu ražotāju aplikācijas, tad šis ir viens no veidiem kā to izdarīt.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...