Avatar billede henrik_nielsen Nybegynder
09. juli 2005 - 00:43 Der er 19 kommentarer

Kun login en gang

Hej Eksperter.

Jeg har lavet et community, og i communityet bruger jeg sessions.
Jeg ville gerne have lavet sådan at man kun kan logge ind en gang, altså sådan man ikke bare kan åbne et nyt internet og logge ind igen, sådan man er logget på to gange.

Kunne forstille mig det var noget lignende:

<?
if(!session_is_registered("brugernavn") && ("kodeord")) {
echo("Du er allerede logget ind.");
} else {
login formel..
?>

Håber nogen kan hjælpe!!
Avatar billede sukos Juniormester
09. juli 2005 - 00:58 #1
Den her:

if(!session_is_registered("brugernavn") && ("kodeord")) {

har jeg set nogen gange her på exp, og det er altså noget skrammelkode!
Avatar billede sukos Juniormester
09. juli 2005 - 00:59 #2
Du er nødt til at registrere hvem som er logget ind, for at forhindre "dobbelt-login"
Avatar billede henrik_nielsen Nybegynder
09. juli 2005 - 01:11 #3
hvordan det :S?
Avatar billede xyborx Nybegynder
09. juli 2005 - 06:52 #4
Du kan registrere brugerens session id i en database når vedkommende logger på, og efterfølgende kun tillade at brugeren surfer rundt med det pågældende session id. Hvis brugeren på et tidspunkt forsøger at surfe med et andet session id, skal han logges af og evt. sendes til login-siden. Det vil så forhindre en bruger i at være logget ind fra flere forskellige browsere samtidigt.
Avatar billede henrik_nielsen Nybegynder
09. juli 2005 - 10:45 #5
Okay, det lyder fornuftigt xyborx, og jeg er nogenlunde med på den.
Men jeg skal vel lave en ny database så?

Og hvordan skal jeg gøre alt det?

Altså jeg mener at en bruger IKKE må kunne logge på den samme bruger f.eks. 2 gange eller flere. Det giver for meget onlinetid i mit community, altså hvis man er logget 2 gange på den samme bruger i mit community for man 2 minutter, på 1 minut.
Avatar billede xyborx Nybegynder
09. juli 2005 - 11:21 #6
Jeg ville nok bare lave et ekstra felt til brugertabellen, men det kommer an på hvordan du har bygget systemet op. Din login funktion skal så (ved successfuldt login) opdatere brugertabellen med det nye session id. Funktion der checker om vedkommende er logget på ved hver forespørgsel skal også udvides, så den checker om det aktuelle session id matcher det gemte session id i databasen, og hvis det ikke er tilfældet skal brugeren betragtes som værende logget ud.

Jeg kan ikke forklare det mere præcis uden at have din kildekode til at pille i :)
Avatar billede henrik_nielsen Nybegynder
09. juli 2005 - 11:51 #7
Her er min login tjek fil :).

<?
session_start();
?>
<html>

<head>

<link rel="stylesheet" href="http://www.specks.dk/style/default.css" type="text/css">

</head>

<body oncontextmenu="return false" ondragstart="return false" onselectstart="return false">

<?
include("mysql/mysql.php");

if($_POST[brugernavn] == "") {
echo("Du mangler at indtaste dit brugernavn!");

} else {

if($_POST[kodeord] == "") {
echo("Du mangler at indtaste dit kodeord!");

} else {

$tjek_bruger = mysql_query("SELECT * FROM community WHERE brugernavn LIKE '$_POST[brugernavn]' AND kodeord = '$_POST[kodeord]'") or die(mysql_error());
$tjek = mysql_fetch_array($tjek_bruger);
if($tjek[brugernavn] == "") {
echo("Forkert brugernavn eller kodeord!");

} else {

$_SESSION[brugernavn] = $_POST[brugernavn];
$_SESSION[kodeord] = $_POST[kodeord];

mysql_query("UPDATE community SET status = 'Online' WHERE brugernavn = '$_SESSION[brugernavn]'") or die(mysql_error());
print "Logger ind...";
print "<meta http-equiv=\"refresh\" content=\"0; url=loginok.php\">";

}
}
}
?>
Avatar billede xyborx Nybegynder
09. juli 2005 - 12:26 #8
Tilføj et felt til din mysql tabel:
ALTER TABLE community ADD(session CHAR(32));
<?php
....
} else {

$_SESSION['brugernavn'] = $_POST['brugernavn'];
$_SESSION['kodeord'] = $_POST['kodeord'];

mysql_query("UPDATE community SET status = 'Online',session='".session_id()."' WHERE brugernavn = '$_SESSION[brugernavn]'") or die(mysql_error());
print "Logger ind...";
print "<meta http-equiv=\"refresh\" content=\"0; url=loginok.php\">";

}
...
?>

Så mangler du bare at indføre et ekstra check på alle de sider hvor du checker om brugeren er logget ind. Hvis du bare gør det ved at checke om $_SESSION['brugernavn'] er sat, så kan du gøre det sådan:

<?php
if(
    !isset($_SESSION['brugernavn'])
    || isset($_SESSION['password'])
    || !mysql_num_rows(mysql_query("SELECT * FROM community WHERE brugernavn='$_SESSION[brugernavn]' AND session=".session_id()."))
)
    {
        // Session check fejlede - log ud
        isset($_SESSION['brugernavn']) && unset($_SESSION['brugernavn']);
        isset($_SESSION['password']) && unset($_SESSION['password']);
        header('Location: login.php');
        die('Du skal være logget ind for at se denne side');
    }
}
?>

Jeg vil nok foreslå at lave det som en funktion, så du ikke skal skrive det hele på alle siderne.
Avatar billede xyborx Nybegynder
09. juli 2005 - 12:29 #9
Argh, der mangler lige et udråbstegn i det sidste stykke kode;

<?php
if(
    !isset($_SESSION['brugernavn'])
    || !isset($_SESSION['password'])
    || !mysql_num_rows(mysql_query("SELECT * FROM community WHERE brugernavn='$_SESSION[brugernavn]' AND session=".session_id()."))
)
    {
        // Session check fejlede - log ud
        isset($_SESSION['brugernavn']) && unset($_SESSION['brugernavn']);
        isset($_SESSION['password']) && unset($_SESSION['password']);
        header('Location: login.php');
        die('Du skal være logget ind for at se denne side');
    }
}
?>
Avatar billede henrik_nielsen Nybegynder
09. juli 2005 - 15:12 #10
den siger:


Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /hsphere/local/home/specks/specks.dk/community/login_tjek.php on line 95
Avatar billede xyborx Nybegynder
09. juli 2005 - 15:24 #11
Ah ja, der var en streng der ikke var blevet afsluttet rigtigt. En af mine typiske fejl :o)

    || !mysql_num_rows(mysql_query("SELECT * FROM community WHERE brugernavn='$_SESSION[brugernavn]' AND session='".session_id()."'"))
Avatar billede xyborx Nybegynder
09. juli 2005 - 15:30 #12
Åh nej, jeg opdagede også lige nogle flere fejl. Jeg var ellers overbevist om at man godt kunne lave en isset(..) && unset(..), men unset() er åbenbart en lidt speciel funktion. Og så var der en } for meget.

<?php
if(
    !isset($_SESSION['brugernavn'])
    || !isset($_SESSION['password'])
    || !mysql_num_rows(mysql_query("SELECT * FROM community WHERE brugernavn='$_SESSION[brugernavn]' AND session='".session_id()."'"))
)
{
    // Session check fejlede - log ud
    if(isset($_SESSION['brugernavn']))
    {
        unset($_SESSION['brugernavn']);
    }
    if(isset($_SESSION['password']))
    {
        unset($_SESSION['password']);
    }
    header('Location: login.php');
    die('Du skal være logget ind for at se denne side');
}
?>
Avatar billede henrik_nielsen Nybegynder
09. juli 2005 - 15:30 #13
Hmm.. for denne fejl nu

Parse error: parse error, unexpected T_UNSET in /hsphere/local/home/specks/specks.dk/community/login_tjek.php on line 52
Avatar billede henrik_nielsen Nybegynder
09. juli 2005 - 16:06 #14
sådan ser mit script ud nu:

<?
session_start();
?>
<html>

<head>

<link rel="stylesheet" href="http://www.specks.dk/style/default.css" type="text/css">

</head>

<body oncontextmenu="return false" ondragstart="return false" onselectstart="return false">

<?
include("mysql/mysql.php");

if($_POST[brugernavn] == "") {
echo("Du mangler at indtaste dit brugernavn!");

} else {

if($_POST[kodeord] == "") {
echo("Du mangler at indtaste dit kodeord!");

} else {

$tjek_bruger = mysql_query("SELECT * FROM community WHERE brugernavn LIKE '$_POST[brugernavn]' AND kodeord = '$_POST[kodeord]'") or die(mysql_error());
$tjek = mysql_fetch_array($tjek_bruger);
if($tjek[brugernavn] == "") {
echo("Forkert brugernavn eller kodeord!");

} else {

mysql_query("UPDATE community SET status = 'Online',session='".session_id()."' WHERE brugernavn = '$_SESSION[brugernavn]'") or die(mysql_error());
print "Logger ind...";
print "<meta http-equiv=\"refresh\" content=\"0; url=loginok.php\">";
}
}
}
?><?php
if(
    !isset($_SESSION['brugernavn'])
    || !isset($_SESSION['password'])
    || !mysql_num_rows(mysql_query("SELECT * FROM community WHERE brugernavn='$_SESSION[brugernavn]' AND session='".session_id()."'"))
)
    {
        // Session check fejlede - log ud
        isset($_SESSION['brugernavn']) && unset($_SESSION['brugernavn']);
        isset($_SESSION['password']) && unset($_SESSION['password']);
        header('Location: login.php');
        die('Du skal være logget ind for at se denne side');
    }
}
?>
Avatar billede xyborx Nybegynder
09. juli 2005 - 16:11 #15
Læs min sidste kommentar angående fejlen med unset(). Jeg var bare så hurtig til at finde den at du nok ikke opdagede det ;)
Avatar billede henrik_nielsen Nybegynder
09. juli 2005 - 16:28 #16
Med det samme man logger ind skriver den: Du er ikke logget ind! :S
Avatar billede henrik_nielsen Nybegynder
15. juli 2005 - 21:37 #17
hallooo?
Avatar billede -veile- Nybegynder
06. april 2007 - 20:20 #18
har du fundet ud af dít problem
Avatar billede -veile- Nybegynder
05. marts 2009 - 21:20 #19
Lukkes pga, gammel tråd, hvis der nogen som blir sure over det, så opret et indlæg, så får personen nogle point
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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