Spaces:
Runtime error
Runtime error
Upload 2 files
Browse files- main_app.py +1 -1
- 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":
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
| 81 |
|
| 82 |
-
logger.debug(f"Cookie初期化: prefix={unique_prefix}, session_id={session_id}")
|
| 83 |
|
| 84 |
# EncryptedCookieManagerを初期化(永続Cookie対応)
|
|
|
|
| 85 |
cookies = EncryptedCookieManager(
|
| 86 |
-
prefix=unique_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:
|