PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : session gast



localhost
21-01-2004, 19:14
Ich hab mir ein login system mal runtergeladen und das so umgebaut das es mir gefelt.
Aber wie ich hier und beim Burning bord giebs Gast session wie geht das bei dem was ich mir runter geladen habe giebs kein gast wie geht das den vonstandeten

msi
22-01-2004, 17:13
das funktioniert genauso, wie bei jedem anderen benutzer auch, nur dass Gast halt der default ist, falls er nicht eingeloggt ist. Außerdem muss Gast von mehreren (sessions) gleichzeitg benutzt werden dürfen.

ich poste gleich mal noch meine login Klasse

msi
22-01-2004, 17:16
<?php
/************************************************** *************************
* login.php
* -------------------
* begin : Monday, Feb 17, 2003
* copyright : (C) 2003 Markus ...
* email : msi00 (at) gmx dot de
*
************************************************** *************************/


/************************************************** *************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
************************************************** *************************/

if (! defined('root_path') ) {
die("hacking attempt on login script");
}

class cl_user {

var $username;
var $loggedin;

function cl_user($page = "Unknown") {
if (session_id() == "") {
if (! @session_start() )
die("can't start a new session");
}

if ( $_SESSION['loggedin'] == 1 && $_SESSION['ip'] == $_SERVER['REMOTE_ADDR'] && $this->_validate_session(session_id())==0 ) {
$this->loggedin = 1;
$this->username = $_SESSION['username'];
$this->_db_entry($this->username, session_id(), $page);
} else {
$this->logout($page);
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}

}

function login($usern, $password, $page="Unknown") {
if ( $this->loggedin ) return -1;
if ( $this->authentificate($usern, $password) != 0) return -2;

$this->loggedin = 1;
$this->username = $usern;
$_SESSION['loggedin'] = 1;
$_SESSION['username'] = $usern;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];

$this->_db_entry($usern, session_id(), $page);
}

function logout($page="Unknown") {
$this->loggedin = 0;
$this->username = "";
$_SESSION['username'] = "";
$_SESSION['loggedin'] = 0;

$this->_db_entry("Guest", session_id(), $page);
$this->_garbage();
}

function authentificate($usern, $password) {
global $config;
$sql = "select * from " . $config['db']['users'] . " where name=\"" . $usern . "\"";
$res = mysql_query($sql);
$arr = @mysql_fetch_array($res);
if (! $arr) {
return 1;
}
if ( $arr['password'] == md5($password) ){
return 0;
} else {
return 1;
}
}

function _garbage() {
global $config;
$sql = "delete from " . $config['db']['auth_active'] . " where
(second(CURRENT_TIME)+minute(CURRENT_TIME)*60+hour (CURRENT_TIME)*3600)-(second(ltime)+mi
nute(ltime)*60+hour(ltime)*3600) > 60 or CURRENT_DATE!=ldate";
mysql_query($sql);
}

function _validate_session($sessionid) {
global $config;
$this->_garbage();
$sql = "select * from " . $config['db']['auth_active'] . " where sid=\"" . $sessionid . "\"";
$res = mysql_query($sql);
if ($arr = mysql_fetch_array($res) ) {
return 0;
} else {
return 1;
}
}

function _db_entry($username, $session, $page="Unknown") {
global $config;
$this->_db_del($session);

$sql = "insert into " . $config['db']['auth_active'] . " (name,ltime,ldate,sid,page) values(\""
. $username . "\",CURRENT_TIME,CURRENT_DATE,\"" . $session . "\", \"" . $page . "\")";
mysql_query($sql);
}

function _db_del($session) {
global $config;
$sql = "delete from " .$config['db']['auth_active'] . " where sid=\"" . $session . "\"";
mysql_query($sql);
}

function get_active_users($page="") {
global $config;
$return = "";
$sql = "select * from " . $config['db']['auth_active'] ;
if ($page!="") $sql .= " where page=\"" . $page . "\"";
$res = mysql_query($sql);
$return = array();

$count=1;
while ($arr = mysql_fetch_array($res)) {
$return[$count++] = array( 1 => $arr['name'], 2 => $arr['page'], 3
=> $arr['ltime'], 4 => $arr['ldate'] );
}

return $return;
}

function show_form($url, $page = "unknown", $logintext = "Login") {
?>
<form action="<?php echo $url; ?>?login=enter" method="post">
<input type="text" name="login_user" />
<input type="password" name="login_password" />
<input type="submit" name="login_go" value="<?php echo $logintext; ?>" />
</form>
<?php
}
}

?>

chavez4k
24-01-2004, 00:19
Ich habe ein Frage zur Funktion '_garbage'

Wird denn die Session nicht automatisch (per default in der php.ini) nach 60min geloescht? Oder habe ich da was falsch verstanden?

Gaert
24-01-2004, 09:33
Original geschrieben von chavez4k
Ich habe ein Frage zur Funktion '_garbage'

Wird denn die Session nicht automatisch (per default in der php.ini) nach 60min geloescht? Oder habe ich da was falsch verstanden?
Es wird lediglich die Session Datei gelöscht - und diese auch nicht nach 60min, sondern nur sie wird lediglich als zu löschen markiert - das heißt nicht, dass sie nach 60min auf jeden fall weg ist.
Hier geht es ja darum die Sessiondaten in der Datenbank zu halten - die Daten aus der Datenbank können logischerweise nur händisch über _garbage gelöscht werden.

msi
24-01-2004, 12:45
meine _garbage funktion hat allerdings einen fehler, am nächsten tag, also um 0:00 muss jeder sich neu einloggen. wenn ich mal zuviel zeit hab werd ich das korrigieren.

localhost
26-01-2004, 11:47
könnte ich das einfach anpassen und die alte session bei mir rauswerfen

msi
28-01-2004, 21:54
Original geschrieben von localhost
könnte ich das einfach anpassen und die alte session bei mir rauswerfen

was willst du wie anpassen?

ach du meinst mein script hernehmen? das kannst du natürlich ist ja unter der gpl :p.
du musst aber einige variablen (mysql tabellen usw) anpassen und schon davor eine verbindung herstellen. wenn du willst kann ich dir noch eine sql datei zum erstellen einer passenden db posten und meine anderen php dateien mit bsp. wie ich dieses login script eingebaut habe, allerdings frühestens am samstag..

localhost
30-01-2004, 12:07
Das wer cool wennst du das machen würdest
Weil ich hab mir was nicht gpl runtergeladen und so viel verändert das es hoffe ich keiner mergt :-)

Wie ich die session machen steht ja auch überall aber mit dem einlogen und sicherbekomemn naja.
schwer schwer.


Original geschrieben von msi
was willst du wie anpassen?

ach du meinst mein script hernehmen? das kannst du natürlich ist ja unter der gpl :p.
du musst aber einige variablen (mysql tabellen usw) anpassen und schon davor eine verbindung herstellen. wenn du willst kann ich dir noch eine sql datei zum erstellen einer passenden db posten und meine anderen php dateien mit bsp. wie ich dieses login script eingebaut habe, allerdings frühestens am samstag..

msi
01-02-2004, 20:45
Original geschrieben von localhost
Das wer cool wennst du das machen würdest
Weil ich hab mir was nicht gpl runtergeladen und so viel verändert das es hoffe ich keiner mergt :-)

Wie ich die session machen steht ja auch überall aber mit dem einlogen und sicherbekomemn naja.
schwer schwer.

hallo,
ja ich hab uahc ne weile rumgetüftelt, bis ich die klasse so hatte.
also hier der code:

create.sql:


create table users (
id int(10) not null auto_increment,
name tinytext not null,
realname tinytext default null,
password tinytext default null,
email tinytext default null,
accesslevel tinytext default "",
primary key(id)
);

create table auth_active (
name tinytext,
ltime time,
ldate date,
page tinytext,
sid tinytext
);

insert into users(name,password) values('markus', md5('passwort'));


db.inc.php:


<?php

if (! defined('root_path') ) {
die ("hacking attempt");
}
if (! defined('inc_config') ) {
die ("config missing");
}

$db = @mysql_connect($config['mysql']['server'] ,"root","temp");
if ( !$db) {
die ("can not connect to the mysql server");
}
if ( ! @mysql_select_db($config['mysql']['database'], $db) ) {
die ("can not connect to the database");
}
?>


config.inc.php


<?php
if (! defined('root_path') ) {
die ("hacking attempt");
}

define( 'inc_config', 1);

$config = "";
$config = array(
web_url => "http://uranus/" );
$config['mysql'] = array (
server => "localhost",
database => "proto",
tablepre => "",
username => "root",
password => "passwort"
);
$config['db'] = array (
users => $config['mysql']['tablepre'] . "users",
auth_active => $config['mysql']['tablepre'] . "auth_active",
protokolle => $config['mysql']['tablepre'] . "protokolle",
tops => $config['mysql']['tablepre'] . "tops",

);
?>



inprogram.inc.php


<?php
if (! defined('root_path') ) {
die ("hacking attempt");
}

define( 'inc_game', 1);

require( root_path . "inc/pre.inc.php");
require( root_path . "inc/login.inc.php");
$user = new cl_user();
if (! $user->loggedin) {
header("Location: " . web_url. "invalid_session.php");
echo "=> Error - Invalid Session <=\nUser needs to relogin";
exit(1);
}
function bottom() { ..... }
?>
<html>
<head>
<?php
if (isset ($DATA_REFRESH)) {
echo '<meta http-equiv="Refresh" content="' . $DATA_REFRESH . '">';
}
?>
<title><?php if ($DATA_TITLE=="" || !isset($DATA_TITLE)) echo ".."; else echo $DATA_TITLE; ?></title>
</head>
<body>



login.php


<?php

if (defined(only_show)) {
show_form();
} else {

define('root_path', "./");
require(root_path . "inc/pre.inc.php");
require(root_path . "inc/login.inc.php");

$user = new cl_user();
$user->logout();


// echo session_id();
// echo "<-";
if (! isset($_POST['user']) ) {
show_form();
} else {
$x="adf";
if ( $x = $user->login($_POST['user'], $_POST['password']) != 0) {
echo "login incorrect $x<br>";
show_form();
} else {
header("Location: " . web_url . "startpage.php");
}
}

}

function show_form() {
echo "<form action=login.php?dologin method=post>Name:<input type=text name=user><br>Passwort:<input type=password name=password><input type=submit></form>";

}

?>



irgendeineseite.php


define('root_path', "./");

$DATA_TITLE = "..";
require (root_path . "inc/inprogram.inc.php");
....


falls du auch leute willst, die nicht eingeloggt sind, musst das halt in ingame.inc.php anpassen und ansonsten im code mit klasse->loggedin überprüfen ob er eingeloggt ist, falls er zugang will.

localhost
11-06-2004, 20:44
Was haltet ihr den davon
marke eigenbau



<? session_start(); // session start

$_SESSION['zeit'] = time();
$_SESSION['ip'] = $_SERVER["REMOTE_ADDR"];
$session = session_id();


/* mysql connegt */
$mysql_server = mysql_connect
(
'localhost', // host
'username', // mysql user
'passwd' // mysql paswd
)
or die("Keine Verbindung möglich: " . mysql_error()); // db_connect
mysql_select_db("no-nick")or die("Auswahl der Datenbank fehlgeschlagen");


/* Gast Group festlegen */
$result_default0 = mysql_query("SELECT default_group_gast,gast_style,admingroup,default_g roup_user FROM board");
while($row2 = mysql_fetch_assoc($result_default0))
{
$gast_groups = $row2['default_group_gast']; // group id 1 = Gast
$user_groups = $row2['default_group_user'];
$gast_style = $row2['gast_style'];
$admingroup = $row2['admingroup'];
}


/* wan kamm wer auch immer auf die page */
if(empty($_SESSION['to_page']) && $_SESSION['ip'] == $_SERVER["REMOTE_ADDR"]) $_SESSION['to_page'] = $_SESSION['zeit'];


/* Username und Passwd vom login formolar oder Cookie */
if($_SESSION['loginenmachen'] == 0 && $_SESSION['ip'] == $_SERVER["REMOTE_ADDR"])
{
if($_REQUEST['loginaction'] == 'login' && $_SESSION['ip'] == $_SERVER["REMOTE_ADDR"])
{
$_SESSION['loginname'] = $_POST['userloginname'];
$_SESSION['passwd_md5_strin'] = $foo = md5($_POST['passwdlogin']);
$_SESSION['authen'] = 1;
}
elseif($_SESSION['logout'] == 0)
{
$_SESSION['loginname'] = $_COOKIE['userloginname'];
$_SESSION['passwd_md5_strin'] = $_COOKIE['md5passwd'];
$_SESSION['authen'] = 1;
}
}


/* Wenn user und passwd stimmen dan login machen */
if($_SESSION['authen'] == 1 && $_SESSION['ip'] == $_SERVER["REMOTE_ADDR"])
{
$authen_sql = "select id,name from users where name='".$_SESSION['loginname']."' and password='".$_SESSION['passwd_md5_strin']."'";
$authen_ergebnisa = mysql_query($authen_sql, $mysql_server);

if(mysql_num_rows($authen_ergebnisa) == 1)
{
$_SESSION['loginenmachen'] = 1;
}
else
{
$_SESSION['loginenmachen'] = 0;
$_SESSION['authen'] = 0;
}
}


/* Gast wenn kein login da ist || Login machen */
if($_SESSION['authen'] == 1 && $_SESSION['loginenmachen'] == 1 && $_SESSION['ip'] == $_SERVER["REMOTE_ADDR"])
{
if($_GET['m'] != 'logout')
{
/* Login als $user['name'] */
$login_ergebnis = mysql_query
(
"
SELECT id,name,usergrupenid,style_id,cookie,schnellantwor t
FROM users
WHERE name='".$_SESSION['loginname']."' AND password='".$_SESSION['passwd_md5_strin']."'
",$mysql_server
);
if(mysql_num_rows($login_ergebnis) == 1)
{
$user = mysql_fetch_array ($login_ergebnis);
}
else
{
$_SESSION['loginenmachen'] = 0;
$_SESSION['authen'] = 0;
}


/* cookie setzen */
if($user['cookie'] == 1)
{
setcookie ("userloginname", $user['name'], time()+3600*24*60,"/");
setcookie ("md5passwd", $_SESSION['passwd_md5_strin'], time()+3600*24*60,"/");
}

$_SESSION['username'] = $user['name'];
$_SESSION['user_session_id'] = $user['id'];

mysql_query("update users set lastlogin='".$_SESSION['zeit']."' where id='".$user['id']."' and name='".$_SESSION['loginname']."'", $mysql_server);

/* welcher style aus der user_db */

$style_ergebnis = mysql_query("select * from style where id='".$user['style_id']."'", $mysql_server);
if(mysql_num_rows($style_ergebnis) == 1)
{
$styleauslesen = mysql_fetch_array ($style_ergebnis);
}
else
{
$_SESSION['loginenmachen'] = 0;
$_SESSION['authen'] = 0;
}

/* Group auslesen */
$ergebnis_group = mysql_query("select * from groups where id='".$user['usergrupenid']."'", $mysql_server);
if(mysql_num_rows($ergebnis_group) == 1)
{
$groups = mysql_fetch_array ($ergebnis_group);
}
else
{
$_SESSION['loginenmachen'] = 0;
$_SESSION['authen'] = 0;
}
}
else
{
$userloginname = '';
$md5passwd = '';

/* Auten und login killen */
$_SESSION['loginenmachen'] = 0;
$_SESSION['authen'] = 0;
$_SESSION['logout'] = 1;

/* Cookie löchen */
setcookie ("userloginname", "");
setcookie ("md5passwd", "");
}
}
else /* else = kein login da oder nicht erfolgreich dan gast und gast_style */
{
$_SESSION['username'] = 'Gast';
$_SESSION['user_session_id'] = 0;

$sqlbefehl_style = "select * from style where id=$gast_style"; /* sytle id 1 = gast style default */
$ergebnis_style = mysql_query($sqlbefehl_style, $mysql_server); /* deafult style = jederman style = standart style */

if(mysql_num_rows($ergebnis_style) == 1)
{
$styleauslesen = mysql_fetch_array ($ergebnis_style);
}

$sqlbefehl = "select * from groups where id=$gast_groups"; // group id 1 = Gast
$ergebnis = mysql_query($sqlbefehl, $mysql_server);

if(mysql_num_rows($ergebnis) == 1)
{
$groups = mysql_fetch_array ($ergebnis);
}
}