Kad cilvēks ievada lietotājvārds un paroli, tā ir pareize - atveras user lapa. Bet es vēlos zināt kā panākt lai saistītās programmas (citas lapas, kas ir user lapā) zinātu, ka viņš ir ielogojies.
Kādam varbūt kāds programmas piemērs, kā ar ielogošanos nesaistītā php programma zinātu, ka viņš ir ielogojies?
Piemēram, šai pašā lapā. Ielogojos un staigāju pa forumu programām, bet viņas zin, ka esmu ielogojies!!
Vienkāršākajā gadījumā, izmanto Sessions, vai sliktākajā gadījumā - Cookies.
Iekš PHP, vispirms atveram sesiju
Kods:
<?php
session_start();
?>
Pēc ielogošanās piešķiram $_SESSION mainīgajam kādu vērtību
Kods:
$_SESSION['ielogojies']='Janis';
Un tad katrā lapā pārbaudām, vai ielogojies ir jānis
Kods:
if(isset($_SESSION['ielogojies']) and $_SESSION['ielogojies']=='Janis'){
//Jānis ir ielogojies, rādām lapu
}else{
//Jānis nav ielogojies, sūtām logoties
}
Šis tāds ļoti primitīvs izskaidrojums, bet, ja pareizi sapratu, tad tieši tas autoram interesēja.
Sesijas mainīgais saglabājas uz servera, bet parasti tikai tik ilgi, kamēr lietotājs neaizver pārlūkprogrammu.
Piemērus vari meklēt jebkurā opensource CMS sistēmā, vai arī Googlē "php login script".
Darbības princips ir skaidrs!!
Bet ir problēma ar PHP funkciju header. Rāda paziņojumu: Warning: Cannot modify header information - headers already sent by (output started at C:\web\www\vv\checklogin.php:7) in C:\web\www\vv\checklogin.php on line 9
Tu mēģini nosūtīt kaut kādu headeru informāciju (Cookies, location utt), pēc tam, kad jau ir sākta datu (HTML) sūtīšana. Tas vispārīgā gadījumā nav iespējams. Būtu arī noderīgi uzzināt, kas tieši atrodas attiecīgā faila 7. un 9. rindiņā.
Ja tiešām nekā savādāk nevar šo problēmu atrisināt, tad var izlīdzēties arī ar output buffering
Labots: Bāc, tagad reku man nedaudz izbrīnu izraisīja šitāda lieta. Lūk oficiālais piemērs no PHP kā nevajag darīt:
Kods:
<html>
<?php
/* This will give an error. Note the output
* above, which is before the header() call */
header('Location: http://www.example.com/');
?>
Es šamējo izmēģināju uz 2 dažādiem serveriem, bet uz abiem viņš DARBOJAS Darboties viņam taču pēc visas loģikas nevajadzētu, bet viņš darbojas bez nekādiem erroriem. Gan uz jaunākā PHP gan uz vecāka 5.1. WTF??
Ja errors rodas dēļ UTF-8, tad pie vainas ir šajā formātā esošais Byte Order Mark. Tie ir daži neredzamie simboli katra UTF-8 faila sākumā, kas tiek nosūtīti klientam, tāpēc vairs nevar sūtīt headerus.
Lai to novērstu, web lapās izmantojamajos failos vienmēr ir jāizmanto speciālo UTF-8 formātu bez BOM.
Notepad++ editorā šis formāts saucas "UTF-8 without BOM" (BOM formāts tur saucas vienkārši UTF-8)
Notepad2 editorā šis formāts saucas UTF-8 (BOM formāts tur saucas UTF-8 Signature)
Citos editoros arī ir kas līdzīgs.
Turpretī, parastais Windows Notepad šo formātu neatbalsta.
Es šamējo izmēģināju uz 2 dažādiem serveriem, bet uz abiem viņš DARBOJAS Darboties viņam taču pēc visas loģikas nevajadzētu, bet viņš darbojas bez nekādiem erroriem. Gan uz jaunākā PHP gan uz vecāka 5.1. WTF??
Ja serverim ir atslēgta kļūdu pazinojumu publiska rādīšana (kā tam uz produkcijas kastēm arī vajadzētu būt), tad konkrētais piemērs varētu arī strādāt.
Gachu : 25 Jūlijs 2009 23:22:33
drono : 25 Jūlijs 2009 23:56:40
<?php
session_start();
?>
Pēc ielogošanās piešķiram $_SESSION mainīgajam kādu vērtību
Un tad katrā lapā pārbaudām, vai ielogojies ir jānis
//Jānis ir ielogojies, rādām lapu
}else{
//Jānis nav ielogojies, sūtām logoties
}
Šis tāds ļoti primitīvs izskaidrojums, bet, ja pareizi sapratu, tad tieši tas autoram interesēja.
Sesijas mainīgais saglabājas uz servera, bet parasti tikai tik ilgi, kamēr lietotājs neaizver pārlūkprogrammu.
Piemērus vari meklēt jebkurā opensource CMS sistēmā, vai arī Googlē "php login script".
Gachu : 26 Jūlijs 2009 19:44:30
drono : 26 Jūlijs 2009 20:35:33
<?php
/* This will give an error. Note the output
* above, which is before the header() call */
header('Location: http://www.example.com/');
?>
Es šamējo izmēģināju uz 2 dažādiem serveriem, bet uz abiem viņš DARBOJAS
Gachu : 26 Jūlijs 2009 23:34:41
drono : 26 Jūlijs 2009 23:43:40
Gachu : 27 Jūlijs 2009 0:35:30
Mad182 : 27 Jūlijs 2009 14:43:45
Ja serverim ir atslēgta kļūdu pazinojumu publiska rādīšana (kā tam uz produkcijas kastēm arī vajadzētu būt), tad konkrētais piemērs varētu arī strādāt.
_________________
100% Microsoft free
Genādijs : 27 Jūlijs 2009 16:14:27
_________________
Šis ir teksts, kuru varat pievienot visām savām publikācijām. Šim tekstam ir 300 zīmju ierobežojums
daGrevis : 27 Jūlijs 2009 16:22:44
_________________
Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/
http://twitter.com/#!/daGrevis
http://last.fm/user/daGrevis
http://ask.fm/daGrevis
http://dagrevis.lv/