Avatar billede charsikrakur Nybegynder
24. februar 2014 - 01:32 Der er 24 kommentarer

Sessions virker fint på localhost men ikke på mit one hos one

Mine PHP sessions virker fint nok når jeg kører mit script på localhost men ligeså snart jeg kører scriptet på mit host hos one.com er det somom at mine sessions ikke bliver husket fra side til side...
Avatar billede skoop Praktikant
24. februar 2014 - 02:00 #1
Du kan prøve at tjekke om de får det samme session id på hver side ved at printe "session_id()"

Hvis du ikke får det samme, så kan det skyldes at du ikke har rettigheder til den mappe php gemmer sin session saves, dette kan du  læse mere om her http://php.net/manual/en/function.session-save-path.php

For at rette op på dette skal du nok kontakte one.com da jeg ikke går ud fra de giver root adgang til det webhotel du har lejet, så derfor kan de kun ændre det.

Håber du finder ud af det! =)
Avatar billede charsikrakur Nybegynder
24. februar 2014 - 02:51 #2
Det er virkelig mærkeligt... Lige før virkede det ikke. Men nu er der ingen problemer på mit Host på one.... Det er totalt underligt..Og jeg har ingen ændringer lavet.
Avatar billede skoop Praktikant
24. februar 2014 - 02:57 #3
Hmmm, kunne være at de har lavet nogle ændringer på det maskine din server lå og det interferede med dit script.

Men glad for at hører det ordnede sig selv! (y)
Avatar billede charsikrakur Nybegynder
24. februar 2014 - 15:28 #4
Jeg checkede.. Og Sesid var det samme på alle sider både på localhost og på one.com.

Det er virkelig mærkeligt.. Idag oplevede jeg at logge ind, klikke videre og den loggede ud... Loggede ind igen og så kunne den igen huske sessions...
Jeg har checket at session_start() står skrevet før alt HTML og PHP kode. Der er heller ikke noget med URL's og fordi der kommer WWW foran for jeg har sikret mig at hostnamet forbliver det samme....
Avatar billede skoop Praktikant
24. februar 2014 - 16:03 #5
Hmmmm, du har vil ikke mulighed for at poste den stump kode du bruger til at tjekke om folk er logged ind?
Avatar billede charsikrakur Nybegynder
24. februar 2014 - 20:09 #6
Mit arkiv fungere nogenlunde sådan her:
har en mappe der hedder include/ med en db.con.php (MySql conn)


De fleste af mine sider i hovedakrivet ser nogenlunde sådan her ud:

<?php
ob_start();
session_start();
include("include/db.con.php");

include("include/top.php");

print " Page content";

include("include/bottom.php");
ob_end_flush();
?>

alle filerne i /include/ inkludere ikke nogen andre filer....

en stump af koden fra include/top.php (Login på alle siderne)
<?php
if(isset($_POST['Method'])=="logincheck"){
    if($_POST['frmUsername'] && $_POST['frmPassword']){

    $countusers = mysql_query("select * from users where email = '".$_POST['frmUsername']."' and md5pass = '".md5($_POST['frmPassword'])."'");
    $count = mysql_num_rows($countusers);
    $row_info = mysql_fetch_array($countusers);
   
        if($count==1){

        $_SESSION["username"] = ($row_info['username']);
        $username = ($row_info['username']);

        } else {
        $ErrText = "<font color=\"red\" size=\"1\"><b>Du har indtastet forkert brugernavn eller kodeord </b></font>";
        }
    } else {
    $ErrText = "<font color=\"red\" size=\"1\"><b>Du skal udfylde begge felter for at kunne logge ind</b></font>";
    }

}
?>

Coden jeg bruger til at tjekke om brugeren er logget ind er nogenlunde sådan her
<?php
if(isset($_SESSION["username"])){

}
?>
Avatar billede charsikrakur Nybegynder
24. februar 2014 - 20:17 #7
Spændende at se hvad du siger :-)


Jeg gad vide om der er forskelv på om man skriver :
$_SESSION['username']
eller
$_SESSION["username"]

er det samme variable ??? ( altså forskelven er " og ' )
Avatar billede skoop Praktikant
25. februar 2014 - 01:32 #8
Php opfatter " og ' ens, men det er altid en god ide at være konsekvent, har selv for vane at bruge ".

Hmm umiddelbart ville jeg tænke at dit problem ligger i din top.php (som jeg tænker er din menu bar i toppen af siden).

Du tjekker på hver side om brugerens kriterier passer med dem i din Mysql database, MEN, du tjekker det med din $_POST data. Problemet med det er jo så at det kun er den første side efter du har loggede ind som kan vises da dit $_POST data ikke bliver givet videre til næste side.

For at fikse dette vil jeg i din top.php tjekke om isset($_SESSION["username"]), og hvis denne værdi er sat, så ville jeg springe log ind over, og antag brugeren er loggede ind. Dette vil lette trafikken på din sql server en del, og måske hente din side lidt hurtigere :).

Håber det gav mening!
Avatar billede charsikrakur Nybegynder
25. februar 2014 - 03:33 #9
Jeg vil nu mene at når jeg har lavet denne foranstaltning i top.php:
if(isset($_POST['Method'])=="logincheck"){
}
Skal $_POST["Method"] have en værdi for overhovedet at belaste serveren? Hmm....

Men. Jeg tager ved lærer af det du siger.. Kan se logikken i det. Vender tilbage når jeg lige er frisket op igen.
Avatar billede charsikrakur Nybegynder
25. februar 2014 - 14:31 #10
Har prøvet at slå " PHP Fejlmeddelser" til på mit host hos One.. Får følgende fejl på alle sider...

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at index.php:1) in index.php on line 4

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /index.php:1) in /index.php on line 4
Avatar billede charsikrakur Nybegynder
25. februar 2014 - 14:34 #11
Har nu gjort som du har sagt også. Har lavet en logincheck.php og sat <form action="logincheck.php"> har også været inde og sætte

sleep(2) før mine header("location: fil.php"); exit;
Avatar billede skoop Praktikant
25. februar 2014 - 15:53 #12
Sørg for at session_start() altid er på den første linje på hvor side, der må ikke engang være et blankt mellemrum i toppen for ellers kan man få problemer med at headeren er sendt, tjek desuden om session_start() bliver kaldt mere end en gang, tror nemlig ikke man må det? Er dog ikke sikker.
Avatar billede charsikrakur Nybegynder
25. februar 2014 - 17:29 #13
Min checklogin fil ser nu således ud.

<?php
ob_start();
session_start();
include("include/db.php");
if(isset($_POST['Method'])=="logincheck"){
    if($_POST['frmUsername'] && $_POST['frmPassword']){
    $countusers = mysql_query("select * from users where email = '".$_POST['frmUsername']."' and md5pass = '".md5($_POST['frmPassword'])."'");
    $count = mysql_num_rows($countusers);
    $row_info = mysql_fetch_array($countusers);
        if($count==1){
        sleep(1);
        $_SESSION["username"] = ($row_info['username']);
        if(isset($_SESSION["username"])){
        session_set_cookie_params('3600');
        sleep(1);
        header("location: index.php");
        exit;
        } else {
        sleep(1);
        header("location: index.php?logincheckerror");
        exit;
        }
        } else {
        $ErrText = "<font color=\"red\" size=\"1\"><b>Du har indtastet forkert brugernavn eller kodeord </b></font>";
        }
    } else {
    $ErrText = "<font color=\"red\" size=\"1\"><b>Du skal udfylde begge felter for at kunne logge ind</b></font>";
    }
}
ob_end_flush();
?>

Må ob_start(); godt kunne før session_start(); ???? (Det skulle jeg mene)


Og jeg har lige fundet ud af.. Hvis jeg laver en hvilkensomhelst fil på mit host hos one med dette indhold:
<?php
header("location: index.php");
?>

og kun dette indhold får jeg fejlmeddelsen:

Warning: Cannot modify header information - headers already sent by (output started at /test.php:1) in /test.php on line

Og hvis fejlmeddelser bliver slået fra viser den bare en blank side
Avatar billede skoop Praktikant
25. februar 2014 - 18:44 #14
Tror faktisk jeg løste et problem lignende på en side (studieklar.net) som jeg er ved at skrive. Når jeg kommer hjem tjekker jeg lige min login fremgangsmåde. Kunne være du ville se kildekoden?
Avatar billede charsikrakur Nybegynder
26. februar 2014 - 00:21 #15
Det ville virkelig være en hjælp, hvis det kunne lære mig en funktionel login metode. Min metode virker åbenbart ved alle server konfigurationer
Avatar billede charsikrakur Nybegynder
26. februar 2014 - 00:22 #16
*åbenbart ikke
Avatar billede skoop Praktikant
26. februar 2014 - 20:13 #17
har lige fundet det her. Det er den jeg sidst har lavet, den virker med blowfish + salt kryptering. Du kan kigge lidt rundt i den og se om den giver mening for dig =).

https://www.dropbox.com/s/yvun68cnyw236rb/Login%20system.rar
Avatar billede charsikrakur Nybegynder
26. februar 2014 - 20:32 #18
Altså, mit problem er at SESSION["username"] åbenbart ikke bliver registreret ordenligt på One's servere. I dit login system bruger du jo samme metode til at regisrere sessions. Har det noget at sige i forhold til sessions om jeg bruger MySQL eller MySQLi / Md5 eller Crypt til passwords???
Avatar billede charsikrakur Nybegynder
26. februar 2014 - 20:33 #19
Det burde jo virke sådan som jeg har lavet det... Det frustrere mig virkelig... Hehe!!!
Avatar billede skoop Praktikant
26. februar 2014 - 20:43 #20
Forstår jeg godt hehe, øhmm altså jeg fravalgte md5 fordi den krypteringsform ikke længere er sikker, og Mysqli valgte jeg bare pga. at det var let at modvirke sql-injections. Sååå det burde ikke have noget at sige nej.
Avatar billede charsikrakur Nybegynder
26. februar 2014 - 20:58 #21
Det ser ellers godt ud på http://version2.studieklar.net/
Avatar billede charsikrakur Nybegynder
26. februar 2014 - 21:06 #22
Her er en lign. tråd faktisk
http://www.eksperten.dk/spm/783126
Avatar billede charsikrakur Nybegynder
02. marts 2014 - 14:20 #23
Så har jeg fundet ud af grunden til fejlen... Det ser ud til at fordi jeg har brugt one.com's file uploader til at uploade min webside, er der under overførslen opstået et Byte Order Mark (BOM) et usyneligt tegn som åbenbart bliver placeret i starten af alle filer.. Min næste udfordring er så at få dem fjernet fra mine filer, fordi jeg har flytte rundt på dem et par gange i Windows...
HVis man overføre sine filer med FTP i binary mode, skulle problemet vidst være løst.....
Avatar billede charsikrakur Nybegynder
14. marts 2014 - 05:15 #24
jeg tilbyder dig point for det ihærdige forsøg på et svar, jeg har kørt min side over på en local Centos server med LAMP og hele balladen. Det var min løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester