session + mysql

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • session + mysql

    hi leutz! Kann mir einer sagen wie ich session mit na datenbank verwirkliche?? Was ich meine ist, wie schaff ich es, dass die session_id in mysql gespeichert wird, wie z.b. bei foren um die sessiondauer umabhängig von der php.ini zu verwalten. Was muss ich dabei beachten etc. finde da nix??

    MFG
    nein?

  • #2
    speicher sie als varchar(32)
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      du kannst ja auch komplett unabhängig von der PHP-SessionID arbeiten

      PHP-Code:

      /* neue session-id vergeben */
      $session_id    md5(uniqid(rand()));

      /* Neue SessionID eintragen ... */
      $result mysql_query"INSERT INTO Site_UserSessions (SessionId, LoginTime) VALUES ('$session_id', NOW())" ); 

      nachtrag:

      Code:
      CREATE TABLE Site_UserSessions (
        SessionKey int(11) NOT NULL auto_increment,
        SessionId varchar(32) NOT NULL default '',
        LoginTime datetime NOT NULL default '0000-00-00 00:00:00',
        PRIMARY KEY  (SessionKey)
      ) ;
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        mh... das hät ich jetzt nicht gedacht.

        Also ich stell mir das so vor:

        1. Session ganz normal createn
        2. Session_id in mysql speichern
        3. Session_id in cookie speichern
        4. Session distroy
        5. Auf der gesicherten seite session_id aufrufen und testen ob sie zu dem cookie passt

        So jetzt meine frage:

        1. Kann man dann aus der session id ürgentwelche daten auslesen oder muss man dann alles per mysql auslesen wo session_id = $session_id

        2. Ist das sicher, oder könnte man aus dem cookie die session nehmen und einfach zu einem anderen pc gehen und diese da an die url anhängen und schon ist man drin?


        MFG
        nein?

        Kommentar


        • #5
          Abraxax, kannst du einmal erklären wie man dann mit der session id umgeht?
          nein?

          Kommentar


          • #6
            sicher ist nix... )

            du kannst ja zur session noch die browserversion, die ip des users schreiben. ausserdem kannst du deinem cookie noch eine expire verpassen, was kurz in der zukunft ist.

            aber ansonsten musst du alles aus der DB auslesen. schliesslich willst du es ja DB gestützt machen.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              îch gebe dir mal zwei scripte. damit solltest du weiterkommen.
              aus dem zweiten (chkpasswd.inc.php) ist der schnippsel, den ich schon gepostet hatte.

              das ist alles schon was älter, also nicht wundern.

              <?php if ($PHP_SELF != "/secure/index.php" ) { header ("Location: /"); } ?>

              <?php

              if ($ec) { $result = mysql_query("SELECT ErrorText FROM Site_AdmErrors WHERE AdmErrorKey='$ec'");
              $zeile = mysql_fetch_array($result);
              $ErrorText = $zeile["ErrorText"];
              } else { $ErrorText = ""; }

              ?>

              PHP-Code:
              /* login.inc.php */
              <br><br><br><br><br>

              <table border="0" cellpadding="0" cellspacing="0" width="450" align="center"><tr><td class="grid">
              <table border="0" cellpadding="2" cellspacing="1" width="450">
                <tr>
                  <td class="tblnavihead">Administrationszugang zur Site</td>
                </tr>
                <tr>
                  <td class="tblnavicon">
                    Bitte geben Sie Ihre Zugangsdaten ein.<br><br>

                    <table border="0" cellpadding="2" cellspacing="1" width="200" align="center">
                    <form method="post" action="." target="_top">
                    <input type="hidden" name="cmd" value="chkpwd">
                    <tr>
                      <td width="70">Username:</td>
                      <td width="130" align="right"><input type="text" name="un" size="20" value="" class="textinput" /></td>
                    </tr>
                    <tr>
                      <td width="70">Password:</td>
                      <td width="130" align="right"><input type="password" name="pw" size="20" value="" class="textinput" /></td>
                    </tr>
                    <tr>
                      <td colspan="2" width="200" align="right"><input type="submit" name="login" value="Login" class="button" /></td>
                    </tr>
                    <tr>
                      <td colspan="2" width="200" align="center"><span class="loginerr">&nbsp;<?php echo $ErrorText?>&nbsp;</span></td>
                    </tr>
                    </form>
                    </table>
                  </td>
                </tr>
              </table>
              </td></tr></table><br>



              /* chkpasswd.inc.php */
              <?php

                
              if ($PHP_SELF != "/secure/index.php" ) { header ("Location: /"); }

                
              /* Nach Passwort suchen:*/
                
              $result mysql_query("SELECT UserKey,user,pwd,MD5('$pw') pw FROM Site_User WHERE user='$un' AND pwd=MD5('$pw')");
                
              $zeile mysql_fetch_array($result);

                
              /* und dazugehörige eintrags_id ermitteln: */
                
              $UserKey $zeile["UserKey"];
                
              $user    $zeile["user"];
                
              $pw      $zeile["pw"];     // Eingegebenes 'pw' MD5 verschlüsselt.
                
              $pwd     $zeile["pwd"];

                if ( 
              $UserKey == "" )
                {
                  
              header ("Location: .?ec=1");
                }
                else
                {
                  if ( (
              $user != $un) || ($pwd != $pw) )
                  {
                    
              header ("Location: .?ec=1");
                  }
                  else
                  {

                    
              $infologout "";

                    
              /* Prüfen, ob user schon eingelogt ist */
                    /* Wenn ja, dann erst einmal alle Sessions von Ihm löschen */
                    
              $result mysql_query"SELECT  SU.UserKey,
                                                    US.SessionKey
                                              FROM  Site_User SU
                                                      LEFT OUTER JOIN Site_User_UserSessions USING(UserKey)
                                                        LEFT OUTER JOIN Site_UserSessions US USING(SessionKey)
                                             WHERE  SU.user='
              $user' AND
                                                    SU.pwd='
              $pw'");
                    
              $CountLogins mysql_num_rows($result);

                    
              $zeile mysql_fetch_array($result);
                    if (
              $zeile["SessionKey"] != null) {

                      
              $UserKey   $zeile["UserKey"];
                      
              $InSessKey "'" $zeile["SessionKey"] . "'";

                      while (
              $zeile mysql_fetch_array($result)) {
                        
              $InSessKey.= " '" $zeile["SessionKey"] . "'";
                      }

                      
              $InSessKey ereg_replace (" "","$InSessKey);

                      
              $result mysql_query("DELETE FROM Site_User_UserSessions WHERE UserKey = '$UserKey'");
                      
              $result mysql_query("DELETE FROM Site_UserSessions WHERE SessionKey IN ($InSessKey)");

                      
              $infologout "&ilo=1";
                    }



                    
              /* neue session-id vergeben */
                    
              $session_id    md5(uniqid(rand()));

                    
              /* Neue SessionID eintragen ... */
                    
              $result mysql_query"INSERT INTO Site_UserSessions (SessionId, LoginTime) VALUES ('$session_id', NOW())" );

                    
              /* ... und in der Verknüpfungstabelle mit dieser SessionID verbinden */
                    
              $result mysql_query"INSERT INTO Site_User_UserSessions (UserKey, SessionKey) VALUES ('$UserKey', LAST_INSERT_ID())" );

                 
              // header ("Location: ".$PHP_SELF."?cmd=menue&sid=" . $session_id . $infologout);
                    
              header ("Location: .?cmd=menue&sid=" $session_id $infologout);
                  }
                }

              ?>
              vielleicht hilft es dir ja weiter.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                hier noch der komplette sql-code der benutzerverwaltung zum erzeugen der tabellen. ich habe aber 'geheime' daten gekillt.

                Code:
                Database DB1645 running on localhost
                # phpMyAdmin MySQL-Dump
                # version 2.2.4
                # [url]http://phpwizard.net/phpMyAdmin/[/url]
                # [url]http://phpmyadmin.sourceforge.net/[/url] (download page)
                #
                # Host: localhost
                # Generation Time: Oct 28, 2002 at 11:17 PM
                # Server version: 3.23.51
                # PHP Version: 4.2.3
                # Database : `DB1645`
                # --------------------------------------------------------
                
                #
                # Table structure for table `Site_AdmErrors`
                #
                
                CREATE TABLE Site_AdmErrors (
                  AdmErrorKey int(11) NOT NULL auto_increment,
                  ErrorText varchar(50) default NULL,
                  PRIMARY KEY  (AdmErrorKey)
                ) TYPE=MyISAM COMMENT='Fehlermeldungen';
                
                #
                # Dumping data for table `Site_AdmErrors`
                #
                
                INSERT INTO Site_AdmErrors VALUES (1, 'Zugriff verweigert');
                INSERT INTO Site_AdmErrors VALUES (2, 'Keine gültige Session ID!');
                # --------------------------------------------------------
                
                #
                # Table structure for table `Site_Modules`
                #
                
                CREATE TABLE Site_Modules (
                  ModulesKey int(11) NOT NULL auto_increment,
                  ModCmd varchar(10) NOT NULL default '',
                  ModFile varchar(25) NOT NULL default '',
                  ModNavi varchar(20) NOT NULL default '',
                  ModText varchar(35) NOT NULL default '',
                  Sort int(11) NOT NULL default '0',
                  PRIMARY KEY  (ModulesKey),
                  UNIQUE KEY ModText (ModText),
                  UNIQUE KEY ModNavi (ModNavi),
                  UNIQUE KEY ModFile (ModFile),
                  UNIQUE KEY ModCmd (ModCmd),
                  UNIQUE KEY Module (ModCmd,ModFile,ModNavi,ModText)
                ) TYPE=MyISAM COMMENT='ModulDefinitionen';
                
                #
                # Dumping data for table `Site_Modules`
                #
                
                SORRY....
                
                # --------------------------------------------------------
                
                #
                # Table structure for table `Site_User`
                #
                
                CREATE TABLE Site_User (
                  UserKey int(11) NOT NULL auto_increment,
                  Name varchar(25) NOT NULL default 'Name',
                  Vorname varchar(25) NOT NULL default 'Vorname',
                  user varchar(12) NOT NULL default '',
                  pwd varchar(32) NOT NULL default '',
                  eMail varchar(30) default NULL,
                  PRIMARY KEY  (UserKey),
                  UNIQUE KEY user (user)
                ) TYPE=MyISAM COMMENT='Zugangsdaten';
                
                #
                # Dumping data for table `Site_User`
                #
                
                SORRY.
                ACHTE NUR DARAUF, DASS DAS PW MD5-VERSCHÜSSELT IN DIE DB KOMMT.
                
                
                # --------------------------------------------------------
                
                #
                # Table structure for table `Site_UserSessions`
                #
                
                CREATE TABLE Site_UserSessions (
                  SessionKey int(11) NOT NULL auto_increment,
                  SessionId varchar(32) NOT NULL default '',
                  LoginTime datetime NOT NULL default '0000-00-00 00:00:00',
                  PRIMARY KEY  (SessionKey)
                ) TYPE=MyISAM;
                
                #
                # Dumping data for table `Site_UserSessions`
                #
                
                INSERT INTO Site_UserSessions VALUES (43, 'd3ccac2320127c7d7daa5e9e2b1764d9', '2002-09-27 09:09:10');
                # --------------------------------------------------------
                
                #
                # Table structure for table `Site_User_Modules`
                #
                
                CREATE TABLE Site_User_Modules (
                  UserKey int(11) NOT NULL default '0',
                  ModulesKey int(11) NOT NULL default '0',
                  UNIQUE KEY User_Modules (UserKey,ModulesKey),
                  KEY UserKey (UserKey),
                  KEY ModulesKey (ModulesKey)
                ) TYPE=MyISAM;
                
                #
                # Dumping data for table `Site_User_Modules`
                #
                
                INSERT INTO Site_User_Modules VALUES (1, 1);
                INSERT INTO Site_User_Modules VALUES (1, 2);
                INSERT INTO Site_User_Modules VALUES (1, 3);
                INSERT INTO Site_User_Modules VALUES (1, 4);
                INSERT INTO Site_User_Modules VALUES (1, 5);
                INSERT INTO Site_User_Modules VALUES (1, 6);
                INSERT INTO Site_User_Modules VALUES (1, 7);
                INSERT INTO Site_User_Modules VALUES (2, 1);
                INSERT INTO Site_User_Modules VALUES (2, 3);
                INSERT INTO Site_User_Modules VALUES (2, 4);
                # --------------------------------------------------------
                
                #
                # Table structure for table `Site_User_UserSessions`
                #
                
                CREATE TABLE Site_User_UserSessions (
                  UserKey int(11) NOT NULL default '0',
                  SessionKey int(11) NOT NULL default '0',
                  UNIQUE KEY User_UserSession (UserKey,SessionKey),
                  KEY UserKey (UserKey),
                  KEY SessionKey (SessionKey)
                ) TYPE=MyISAM;
                
                #
                # Dumping data for table `Site_User_UserSessions`
                #
                
                INSERT INTO Site_User_UserSessions VALUES (2, 43);
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  mh, ja dnake erstmal, muss ich erstmal durchschauen ob ich das versteh. Aber ist in der db speichern insgesamt nicht so sicher wie serverseitg?
                  nein?

                  Kommentar


                  • #10
                    die DB ist serverseitig.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      die DB-tabellen von mir sind alle durch verknüfungstabellen verknüpft.

                      du brauchst zum testen eigentlich nur die tabelle Site_UserSessions. musst halt die SQL befehle anpassen, wenn du die anderen tabellen nicht verwendest.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar

                      Lädt...
                      X