sirochild commited on
Commit
9dd4de3
·
verified ·
1 Parent(s): 71a7e8c

Upload 2 files

Browse files
Files changed (2) hide show
  1. main_app.py +1 -1
  2. persistent_user_manager.py +38 -5
main_app.py CHANGED
@@ -338,7 +338,7 @@ def initialize_session_state(managers, force_reset_override=False):
338
  # セッション情報をログ出力
339
  from datetime import datetime # ローカルインポートで確実に利用可能にする
340
  session_info = {
341
- "user_id": st.session_state.user_id[:8] + "...", # プライバシー保護のため一部のみ
342
  "session_id": id(st.session_state),
343
  "force_reset": force_reset,
344
  "session_changed": session_changed,
 
338
  # セッション情報をログ出力
339
  from datetime import datetime # ローカルインポートで確実に利用可能にする
340
  session_info = {
341
+ "user_id": session_id[:8] + "...", # session_idを直接使用(既に設定済み)
342
  "session_id": id(st.session_state),
343
  "force_reset": force_reset,
344
  "session_changed": session_changed,
persistent_user_manager.py CHANGED
@@ -60,15 +60,31 @@ class PersistentUserManager:
60
  """Cookie管理システムの初期化(永続Cookie対応)"""
61
  # 既に初期化済みで、強制初期化でない場合はスキップ
62
  if self._cookie_initialized and not force_init and self.cookies is not None:
 
63
  return
64
 
65
  # セッション固有のCookie初期化チェック(重複防止)
66
  session_id = id(st.session_state)
67
  browser_session_key = f"hf_cookie_init_{session_id}"
68
- if not force_init and st.session_state.get(browser_session_key, False) and self.cookies is not None:
 
 
 
 
 
 
69
  self._cookie_initialized = True
 
 
 
 
 
 
 
70
  return
71
 
 
 
72
  try:
73
  logger.info("HF Spaces永続Cookie管理システム初期化開始...")
74
 
@@ -77,14 +93,18 @@ class PersistentUserManager:
77
 
78
  # セッション固有のユニークなprefixを生成(重複回避)
79
  session_id = id(st.session_state)
80
- unique_prefix = f"hf_s{session_id}_"
 
 
81
 
82
- logger.debug(f"Cookie初期化: prefix={unique_prefix}, session_id={session_id}")
83
 
84
  # EncryptedCookieManagerを初期化(永続Cookie対応)
 
85
  cookies = EncryptedCookieManager(
86
- prefix=unique_prefix, # セッション固有のユニークなprefix
87
- password=cookie_password
 
88
  )
89
 
90
  # Cookieが準備できるまで待機(最大3回試行)
@@ -110,6 +130,11 @@ class PersistentUserManager:
110
  # セッション固有のフラグを設定
111
  st.session_state[browser_session_key] = True
112
 
 
 
 
 
 
113
  # 既存Cookieの確認
114
  try:
115
  existing_cookies = dict(self.cookies)
@@ -120,9 +145,17 @@ class PersistentUserManager:
120
 
121
  except Exception as e:
122
  logger.error(f"Cookie管理初期化エラー: {e}")
 
 
 
 
 
 
 
123
  # フォールバック: セッション状態のみ使用
124
  self.cookies = None
125
  self._cookie_initialized = True
 
126
  st.session_state[browser_session_key] = True
127
 
128
  def get_or_create_user_id(self, force_reset: bool = False) -> str:
 
60
  """Cookie管理システムの初期化(永続Cookie対応)"""
61
  # 既に初期化済みで、強制初期化でない場合はスキップ
62
  if self._cookie_initialized and not force_init and self.cookies is not None:
63
+ logger.debug("Cookie管理システム既に初期化済み - スキップ")
64
  return
65
 
66
  # セッション固有のCookie初期化チェック(重複防止)
67
  session_id = id(st.session_state)
68
  browser_session_key = f"hf_cookie_init_{session_id}"
69
+
70
+ # より厳密な重複チェック
71
+ if (not force_init and
72
+ st.session_state.get(browser_session_key, False) and
73
+ self.cookies is not None and
74
+ hasattr(self.cookies, 'ready') and
75
+ self.cookies.ready()):
76
  self._cookie_initialized = True
77
+ logger.debug("Cookie管理システム既に準備完了 - スキップ")
78
+ return
79
+
80
+ # 初期化処理中フラグを設定(重複初期化防止)
81
+ init_in_progress_key = f"hf_cookie_initializing_{session_id}"
82
+ if st.session_state.get(init_in_progress_key, False):
83
+ logger.warning("Cookie初期化処理中 - 重複初期化を防止")
84
  return
85
 
86
+ st.session_state[init_in_progress_key] = True
87
+
88
  try:
89
  logger.info("HF Spaces永続Cookie管理システム初期化開始...")
90
 
 
93
 
94
  # セッション固有のユニークなprefixを生成(重複回避)
95
  session_id = id(st.session_state)
96
+ import time
97
+ timestamp = int(time.time() * 1000) # ミリ秒タイムスタンプ
98
+ unique_prefix = f"hf_{session_id}_{timestamp}_"
99
 
100
+ logger.debug(f"Cookie初期化: prefix={unique_prefix}, session_id={session_id}, timestamp={timestamp}")
101
 
102
  # EncryptedCookieManagerを初期化(永続Cookie対応)
103
+ # 完全にユニークなキーを使用
104
  cookies = EncryptedCookieManager(
105
+ prefix=unique_prefix, # タイムスタンプ付きの完全にユニークなprefix
106
+ password=cookie_password,
107
+ key=f"CookieManager_{session_id}_{timestamp}" # 内部キーも完全にユニーク
108
  )
109
 
110
  # Cookieが準備できるまで待機(最大3回試行)
 
130
  # セッション固有のフラグを設定
131
  st.session_state[browser_session_key] = True
132
 
133
+ # 初期化処理中フラグをクリア
134
+ init_in_progress_key = f"hf_cookie_initializing_{session_id}"
135
+ if init_in_progress_key in st.session_state:
136
+ del st.session_state[init_in_progress_key]
137
+
138
  # 既存Cookieの確認
139
  try:
140
  existing_cookies = dict(self.cookies)
 
145
 
146
  except Exception as e:
147
  logger.error(f"Cookie管理初期化エラー: {e}")
148
+
149
+ # 初期化処理中フラグをクリア
150
+ session_id = id(st.session_state)
151
+ init_in_progress_key = f"hf_cookie_initializing_{session_id}"
152
+ if init_in_progress_key in st.session_state:
153
+ del st.session_state[init_in_progress_key]
154
+
155
  # フォールバック: セッション状態のみ使用
156
  self.cookies = None
157
  self._cookie_initialized = True
158
+ browser_session_key = f"hf_cookie_init_{session_id}"
159
  st.session_state[browser_session_key] = True
160
 
161
  def get_or_create_user_id(self, force_reset: bool = False) -> str: