Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] Smarty + Własny mechanizm sesji
Forum PHP.pl > Forum > PHP
CzesLaW'ek
Napisałem sobie klasę, własny mechanizm sesji. W skrócie działa on tak, że jeśli w adresie url nie ma zakodowanego w sha1 klucza, skrypt generuje go i robi redirect do strony głównej na końcu url dodając nowy klucz. Metoda sprawdzająca autentyczność klucza zapobiega powownym przekierowaniom a co za tym idzie wstawianiu kolejnych rekordów do bazy.

Poniżej zamieszczam jedynie potrzebne w tym momencie metody tej klasy:

  1. <?php
  2.  
  3. class session
  4. {
  5. # Session data
  6. var $session_key = 0;
  7. var $session_ip = '';
  8. var $session_browser = '';
  9. var $session_time = 0;
  10. var $session_name = array();
  11. var $session_content = array();
  12.  
  13. # Guest data
  14. var $ip = '';
  15. var $browser = '';
  16. var $type = 0;
  17.  
  18. # Others
  19. var $auth = OFF;
  20.  
  21.  
  22. # Constructor
  23. function session()
  24. {
  25. $this -> spy_guest();
  26. $this -> garbage_collector();
  27.  
  28. if( $this -> type == WEBBOT )
  29. {
  30. $this -> bot_session();
  31.  
  32. return 1;
  33. }
  34.  
  35. if( $this -> auth_session() )
  36. {
  37. $this -> prepare_session();
  38.  
  39. return 1;
  40. }
  41.  
  42. $this -> start_session();
  43.  
  44. return 0;
  45. }
  46.  
  47. # Start new session
  48. function start_session()
  49. {
  50. if( $this -> auth == ON )
  51. {
  52. return 0;
  53. }
  54.  
  55. global $db;
  56.  
  57. $t_key = sha1( uniqid( rand(), true ) );
  58. $t_sessions_table = config_get( 'sessions_table' );
  59. $t_path = config_get( 'path' );
  60. $t_default_include = config_get( 'default_include' );
  61.  
  62. $db -> sql_query( 'INSERT INTO '. $t_sessions_table .'
  63. ( session_key, ip, browser, time )
  64.  VALUES ( ''. $t_key .'',
  65. ''. $this -> ip .'',
  66. ''. $this -> browser .'',
  67. ''. time() .'' )' );
  68.  
  69. header( 'Location: ' . $t_path .'index/'. $t_default_include .'/'. $t_key );
  70. exit();
  71. }
  72.  
  73. # Check if session is set
  74. function auth_session()
  75. {
  76. if( $this -> type !== GUEST )
  77. {
  78. $this -> auth = OFF;
  79. return 0;
  80. }
  81.  
  82. $t_url_vars = config_url_get();
  83.  
  84. if( strlen( end( $t_url_vars ) ) == 40 )
  85. {
  86. global $db;
  87. $t_sessions_table = config_get( 'sessions_table' );
  88.  
  89. $this -> session_key = end( $t_url_vars );
  90.  
  91. $db -> sql_query( 'SELECT id
  92.  FROM '. $t_sessions_table .'
  93.  WHERE session_key = ''. $this -> session_key .''' );
  94.  
  95. if( $db -> sql_numrows() >= 1 )
  96. {
  97. $this -> auth = ON;
  98. return 1;
  99. }
  100. }
  101.  
  102. $this -> auth = OFF;
  103. return 0;
  104. }
  105.  
  106. ?>


Teraz przejdzmy do mojego problemu. Chodzi o to że przy każdym odpaleniu skryptu do bazy dodają się 3 rekordy zamiast jednego. Nie wiem czemu tak jest. Wydaje mi się że wszystko zrobiłem ok. Sprawdzałem to już na dwóch kompach i ciągle to samo.

Proszę o pomoc smile.gif

Dodam, że te trzy dodane wpisy mają różne generowane klucze z czego pierwszy dodany jest właściwy... nie wiem co się z tym dzieje ... tak jakby przekierowywał trzy razy zamiast raz.

EDIT: Doszedłem do tego ze z klasa jest wszystko ok tylko cos gryzie sie ze smartami... mam klase dziedziczaca ze smarty:

  1. <?php
  2.  
  3. require_once( $g_smarty_path . '/Smarty.class.php' );
  4.  
  5. class my_smarty extends Smarty {
  6. function my_smarty() {
  7. $this -> Smarty();
  8.  
  9. $this -> template_dir = './templates/';
  10.  
  11. $this -> compile_dir = './templates_c/';
  12.  
  13. $this -> caching = false;
  14.  
  15. $this -> debugging = false;
  16. }
  17. }
  18.  
  19. ?>


I jesli w index zahashuje linie:

$smarty -> display( 'index.tpl' );

Wszystko jest ok... i dodaje tylko jeden wpis do bazy.
Teraz tylko pytanie jak mozna to naprawic questionmark.gif
aleksander
NTF: php Pro => php
CzesLaW'ek
Doszedłem w końcu mniej więcej o co chodzi... wszystko jest napisane w moim pierwszym poście. Jednak nadal nie wiem co z tym zrobic :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.