Welcome, Guest. Please login or register.
Did you miss your activation email?
May 26, 2012, 06:37:36 AM

Login with username, password and session length
Search:     Advanced search
Wollen Sie dem WebsiteBaker Team beitreten?
Nähere Informationen finden Sie unter hier und auf unserer neuen Webseite.
155533 Posts in 21713 Topics by 7760 Members
Latest Member: chris85
* Home Help Search Login Register
Pages: [1]   Go Down
Print
Author Topic: Schon VOR config.php checken, ob User angemeldet ist?  (Read 765 times)
chio
WebsiteBaker Org e.V.

Offline Offline

Posts: 2264


« on: June 14, 2010, 08:15:39 AM »

Gibt es eine schnelle Möglichkeit schon im access-file zu checken, ob der aktuelle User angemeldet ist - noch bevor die config.php oder index.php geladen wird?
Etwa über $_SESSION?

Hintergrund: Eine Seite hat sehr sprunghaft viele Zugriffe, immer um bestimmte Zeiten herum. Ich denke daran, zumindest die Seiten der ersten Ebene (die sich nur selten ändern) zu cachen, und zwar schon im access-file:
if (user ist angemeldet) {wie üblich} else {include('cache-seite-xx.php'); fertig;}
Hintergrund2: Die Startseite ist sehr komplex (viele Module), da kann mal ein Fehler passieren. Die Redakteure möchten nicht, dass Fehler gleich für alle sichtbar sind.
Das Caching selbst wäre brachial: wird ein bestimmter Parameter mitgegeben, wird $output am ende der index.php als file rausgeschrieben.
Logged

*weg*
DarkViper
Development Team
*****
Offline Offline

Posts: 1252


« Reply #1 on: June 14, 2010, 08:57:20 AM »

ganz kurz:   nein

etwas weniger kurz:

es ist nicht möglich, die richtige Session zu starten, solange man den APP_NAME noch nicht aus der Datenbank ausgelesen hat.
Eine 'Hauruck-Lösung' stellt die komplette Sicherheit in WB in Frage.
Logged

Anleitungen lesen und selber nachdenken ist anstrengend...  Da lass ich doch lieber andere für mich denken...

In 1984:  Nineteen Eighty-Four is a unrealistic utopia!!
In 2012:  Nineteen Eighty-Four is a little piece only of our reality!!
chio
WebsiteBaker Org e.V.

Offline Offline

Posts: 2264


« Reply #2 on: June 14, 2010, 09:45:22 AM »

Ich will ja gar keine Session starten. Es geht nur darum, zu erkennen ob ein Besucher überhaupt eine hat.

Also: Hat der aktuelle Besucher - sicher - keine Berechtigungen?
Das möchte ich wissen, bevor das ganze Werkel gestartet wird, weil ich es ja dann gar nicht brauche.
Logged

*weg*
DarkViper
Development Team
*****
Offline Offline

Posts: 1252


« Reply #3 on: June 14, 2010, 11:33:49 AM »

geht nicht..

Du brauchst den APP_NAME aus den Settings, um die aktuelle WB-Session öffnen zu können, die die meisten erforderlichen Infos enthält.
Die Datenbank und die Session sind die einzigen Stellen, wo Du Deine benötigten Infos holen kannst. Cookies sind für solche Zwecke indiskutabel.

Ansonsten hilft nur die Glaskugel.....
Logged

Anleitungen lesen und selber nachdenken ist anstrengend...  Da lass ich doch lieber andere für mich denken...

In 1984:  Nineteen Eighty-Four is a unrealistic utopia!!
In 2012:  Nineteen Eighty-Four is a little piece only of our reality!!
chio
WebsiteBaker Org e.V.

Offline Offline

Posts: 2264


« Reply #4 on: June 14, 2010, 12:35:11 PM »

Ja. APP_NAME kommt aus der Datenbank.
Aber: Wenn ich die Konstante APP_NAME (die sich ja nie mehr ändert) schon im access-file angebe - spricht da was dagegen? - dann weiß ich: Zu dieser Seite sollte eine Cache-Version vorhanden sein.
Das access-file ist ja schnell mal neu angelegt.

Dann kann ich ganz oben in framework/initialize.php das einfügen:

Code:
if(defined('APP_NAME') AND count($_POST)==0 AND count($_GET)==0) {
session_name(APP_NAME.'_session_id');
@session_start();
define('SESSION_STARTED', true);
if (isset($_SESSION['USER_ID'])) {
//User ist angemeldet - hier nichts tun
} else {
$p = WB_PATH.'/cache/cache'.$page_id.'.html';
if (file_exists($p)) {
include($p);
die();
}
}
}

Jetzt müsste ich mich nur mehr darum kümmern, dass die cache-files geschrieben/verwaltet werden. ("nur mehr" ist gut..)
Und schauen, dass eventuelle Parameter (GET/POST) keinen Ärger machen;

Ich hab mal auf die Ladezeiten (Latenzzeit) geschaut: Bei Seiten mit großen Menüs (dropdown mit 70 Seiten) und vielen Modulen trägt das ganz schön auf: von 1.5 Sekunden runter auf 200ms. Stimmt natürlich: Das geht nur mit Websites, die sich kaum ändern.

Nebenfrage: Warum legt WB eigentlich IMMER eine Session an?
« Last Edit: June 14, 2010, 12:57:26 PM by chio » Logged

*weg*
DarkViper
Development Team
*****
Offline Offline

Posts: 1252


« Reply #5 on: June 14, 2010, 12:57:10 PM »

Das wird nur kurzfristig funktionieren, da zukünftig Accessfiles ein absolut einheitliches, festes Format haben müssen und nur noch von einer Core-Funktion angelegt werden dürfen. Sie werden bei einem Neuaufbau des Seitenbaumes oder einer Reorganisation gnadenlos vom System überschrieben werden.

(nur als kleine Vorwarnung auf die nächsten Releases)
Logged

Anleitungen lesen und selber nachdenken ist anstrengend...  Da lass ich doch lieber andere für mich denken...

In 1984:  Nineteen Eighty-Four is a unrealistic utopia!!
In 2012:  Nineteen Eighty-Four is a little piece only of our reality!!
chio
WebsiteBaker Org e.V.

Offline Offline

Posts: 2264


« Reply #6 on: June 14, 2010, 01:07:53 PM »

Naja - in diesem Fall würde einfach das Caching aussetzen; kein Malheur, weil keine anderen Folgen.
Solange bis man "nachgebessert" hat.
Logged

*weg*
pcwacht
AddOn Development
*
Offline Offline

Posts: 2859



WWW
« Reply #7 on: June 14, 2010, 02:21:56 PM »

Caching kann auch ins template versteckt werden,
show cache if page_id = ('1',12',....) und so weiter

nachteile ist naturlich dass manche db abfrage schon passiert sind, aber sie haben auch mehr control aufs cache

Und grosse vorteile, soll immer klappen, auch nach ein update


Gruss,
John
Logged

http://www.ictwacht.nl = Dutch ICT info
http://www.pcwacht.nl = My first
both still work in progress, since years.....
chio
WebsiteBaker Org e.V.

Offline Offline

Posts: 2264


« Reply #8 on: June 14, 2010, 03:15:42 PM »

Hallo John,
Das habe ich schon versucht. Das Problem dabei: Es bringt nicht viel.
Einige Module sind langsam, aber da müsste man die Module selbst ändern.

Vor allem bremst auch das Menü sehr stark, wenn viele Menüpunkte sind.
Logged

*weg*
thorn

Offline Offline

Posts: 980


WWW
« Reply #9 on: June 14, 2010, 04:17:18 PM »

Hallo,

der passende Ort dafür wäre die index.php im root-Verzeichnis.
Und zwar ziemlich am Ende, aber bevor das Template aufgerufen wird.

Das hat den Vorteil, das dort die Session schon erzeugt ist, und du einfach is_authenticated() benutzen kannst.
Z.B:
Code:
if($wb->is_authenticated()) {
  // require Template ... und so weiter
} else {
  // Seite im Cache?
  // aus Cache lesen,
  // oder require Template ...
  // in Cache schreiben
}
// Ausgeben


thorn.
« Last Edit: June 14, 2010, 05:48:47 PM by thorn » Logged

chio
WebsiteBaker Org e.V.

Offline Offline

Posts: 2264


« Reply #10 on: June 14, 2010, 04:51:41 PM »

Ja, das ginge natürlich auch.
Aber: Wenn schon knausern, dann richtig! Also auch ohne functions und classes und allem.
ein fehlendes $_SESSION['USER_ID'] als Merkmal sollte völlig reichen, denke ich.
Logged

*weg*
pcwacht
AddOn Development
*
Offline Offline

Posts: 2859



WWW
« Reply #11 on: June 14, 2010, 05:43:05 PM »

Am besten sie fangen an mit die index.php weil sie nuhr EIN bestand erweitern muss
Auch wird jedes access-file gleich dieser index.php ausfuhren

Anderungen am haupt index.php
Gleich nach $wb = new frontend();
kannst du is_authenticated(); nutzen
Ist am schnellsten.

Viel spass,
John
Logged

http://www.ictwacht.nl = Dutch ICT info
http://www.pcwacht.nl = My first
both still work in progress, since years.....
chio
WebsiteBaker Org e.V.

Offline Offline

Posts: 2264


« Reply #12 on: June 16, 2010, 07:32:34 AM »

Wie kann ich eigentlich feststellen, ob es überhaupt eine bestehende Session gibt? Ohne eine anzulegen?
Logged

*weg*
DarkViper
Development Team
*****
Offline Offline

Posts: 1252


« Reply #13 on: June 16, 2010, 05:38:36 PM »

Normalerweise startet eine default Session automatisch (lässt sich in der PHP-ini einstellen), sobald auf eine Sessionvariable ( $_SESSION['xyz'] ) zugegriffen wird.
Aus Sicherheitsgründen nutzt WB jedoch nicht die default-Session, sondern versieht sie mit einem speziellen Namen.

 session_name( APP_NAME.'_session_id' );
  @ session_start( );


Wird die Session auf andere Weise gestartet, so steht sie zwar zur Verfügung, enthält aber nicht die Inhalte der eigentlichen WB-Session.

Des weiteren sind die Auswirkungen auf das komplette System völlig unkalkulierbar, wenn die Session ausserhalb des normalen Kontext gestartet wird. (WB ist in der Hinsicht sehr instabil)

Logged

Anleitungen lesen und selber nachdenken ist anstrengend...  Da lass ich doch lieber andere für mich denken...

In 1984:  Nineteen Eighty-Four is a unrealistic utopia!!
In 2012:  Nineteen Eighty-Four is a little piece only of our reality!!
chio
WebsiteBaker Org e.V.

Offline Offline

Posts: 2264


« Reply #14 on: June 24, 2010, 07:29:24 AM »

Ja, ich habe gemerkt, dass das "so" - ich hab ja in den php-Foren gestochert - nicht funktioniert.

Das bedeutet aber, dass dass ich grundsätzlich immer eine Session starten muss, um zu überprüfen, ob eine nötig ist.
Ist das schlau?
Selbst auf einer aktiven Site braucht nur jeder 1000e Besucher eine Session.
Könnte man nicht die Standard-Session benutzen, um anzuzeigen, dass es eine weitere Session (nicht Standard) gibt?
Logged

*weg*
DarkViper
Development Team
*****
Offline Offline

Posts: 1252


« Reply #15 on: June 24, 2010, 10:44:50 AM »


Selbst auf einer aktiven Site braucht nur jeder 1000e Besucher eine Session.


das ist sooo nicht ganz richtig.....

Grundsätzlich jeder Aufruf einer Seite benutzt die eine Session.
Viele Module sind ohne Session gar nicht lauffähig, da sie mittels Session verschiedene Einstellungen/Variablen von einem Seitenaufruf zum nächsten weiterreichen.

Die Session enthält u.a. die Grundeinstellungen eines Users, um bei jedem Seitenaufruf ein komplettes Neuerstellen aus der Datenbank zu vermeiden.
Auch ein nicht angemeldeter User ist trotzdem ein Benutzer der Site, nur eben der mit der UserID 0.. und vordefinierten Einstellungen.

Die erste Funktion die bei WB aufgerufen wird, heist nicht umsonst 'initialize' ...  Was bedeutet, dass sie das System beim Start (und darunter ist absolut jeder externe Aufruf einer WB-Funktion zu verstehen) initialisiert und dadurch in einen genau definierten Ausgangszustand versetzt.

Logged

Anleitungen lesen und selber nachdenken ist anstrengend...  Da lass ich doch lieber andere für mich denken...

In 1984:  Nineteen Eighty-Four is a unrealistic utopia!!
In 2012:  Nineteen Eighty-Four is a little piece only of our reality!!
chio
WebsiteBaker Org e.V.

Offline Offline

Posts: 2264


« Reply #16 on: June 24, 2010, 02:29:33 PM »

Jepp, ich hab den Krempel, um den es geht mal hier zusammengeschreieb, vielleicht kann ja wer was damit anfangen:
http://www.websitebaker2.org/forum/index.php/topic,18589.msg123998.html#msg123998
Logged

*weg*
Pages: [1]   Go Up
Print
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!