sirochild commited on
Commit
2d13bf7
·
verified ·
1 Parent(s): 90babcf

Upload persistent_user_manager.py

Browse files
Files changed (1) hide show
  1. persistent_user_manager.py +23 -22
persistent_user_manager.py CHANGED
@@ -63,9 +63,8 @@ class PersistentUserManager:
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
@@ -74,34 +73,32 @@ class PersistentUserManager:
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
 
91
  # セキュアなパスワードを生成(環境変数から取得、なければ生成)
92
  cookie_password = os.getenv("MARI_COOKIE_PASSWORD", "mari_chat_secure_key_2024")
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
  cookies = EncryptedCookieManager(
104
- prefix=unique_prefix, # タイムスタンプ付きの完全にユニークなprefix
105
  password=cookie_password
106
  )
107
 
@@ -125,35 +122,39 @@ class PersistentUserManager:
125
  self.cookies = cookies
126
  self._cookie_initialized = True
127
 
128
- # セッション固有のフラグを設定
129
  st.session_state[browser_session_key] = True
130
 
131
  # 初期化処理中フラグをクリア
132
- init_in_progress_key = f"hf_cookie_initializing_{session_id}"
133
  if init_in_progress_key in st.session_state:
134
  del st.session_state[init_in_progress_key]
135
 
136
  # 既存Cookieの確認
137
  try:
138
  existing_cookies = dict(self.cookies)
139
- logger.info(f"HF Spaces永続Cookie管理システム初期化完了 - prefix: {unique_prefix}, 既存Cookie数: {len(existing_cookies)}")
 
 
 
 
 
 
 
 
140
  except Exception as cookie_check_e:
141
  logger.debug(f"Cookie確認エラー(通常動作に影響なし): {cookie_check_e}")
142
- logger.info(f"HF Spaces永続Cookie管理システム初期化完了 - prefix: {unique_prefix}")
143
 
144
  except Exception as e:
145
- logger.error(f"Cookie管理初期化エラー: {e}")
146
 
147
  # 初期化処理中フラグをクリア
148
- session_id = id(st.session_state)
149
- init_in_progress_key = f"hf_cookie_initializing_{session_id}"
150
  if init_in_progress_key in st.session_state:
151
  del st.session_state[init_in_progress_key]
152
 
153
  # フォールバック: セッション状態のみ使用
154
  self.cookies = None
155
  self._cookie_initialized = True
156
- browser_session_key = f"hf_cookie_init_{session_id}"
157
  st.session_state[browser_session_key] = True
158
 
159
  def get_or_create_user_id(self, force_reset: bool = False) -> str:
 
63
  logger.debug("Cookie管理システム既に初期化済み - スキップ")
64
  return
65
 
66
+ # 固定キーでCookie初期化チェック(永続化対応)
67
+ browser_session_key = "hf_persistent_cookie_initialized"
 
68
 
69
  # より厳密な重複チェック
70
  if (not force_init and
 
73
  hasattr(self.cookies, 'ready') and
74
  self.cookies.ready()):
75
  self._cookie_initialized = True
76
+ logger.debug("永続Cookie管理システム既に準備完了 - スキップ")
77
  return
78
 
79
  # 初期化処理中フラグを設定(重複初期化防止)
80
+ init_in_progress_key = "hf_persistent_cookie_initializing"
81
  if st.session_state.get(init_in_progress_key, False):
82
+ logger.warning("永続Cookie初期化処理中 - 重複初期化を防止")
83
  return
84
 
85
  st.session_state[init_in_progress_key] = True
86
 
87
  try:
88
+ logger.info("HF Spaces永続Cookie管理システム初期化開始(固定prefix使用)...")
89
 
90
  # セキュアなパスワードを生成(環境変数から取得、なければ生成)
91
  cookie_password = os.getenv("MARI_COOKIE_PASSWORD", "mari_chat_secure_key_2024")
92
 
93
+ # 固定のprefixを使用(永続Cookie読み込みのため)
94
+ # リロード後も同じCookieを読み込めるよう、固定のprefixを使用
95
+ fixed_prefix = "hf_persistent_mari_"
 
 
96
 
97
+ logger.debug(f"Cookie初期化: prefix={fixed_prefix} (固定prefix使用)")
98
 
99
  # EncryptedCookieManagerを初期化(永続Cookie対応)
100
  cookies = EncryptedCookieManager(
101
+ prefix=fixed_prefix, # 固定prefixで永続Cookie読み込み対応
102
  password=cookie_password
103
  )
104
 
 
122
  self.cookies = cookies
123
  self._cookie_initialized = True
124
 
125
+ # 永続化フラグを設定
126
  st.session_state[browser_session_key] = True
127
 
128
  # 初期化処理中フラグをクリア
 
129
  if init_in_progress_key in st.session_state:
130
  del st.session_state[init_in_progress_key]
131
 
132
  # 既存Cookieの確認
133
  try:
134
  existing_cookies = dict(self.cookies)
135
+ logger.info(f"HF Spaces永続Cookie管理システム初期化完了 - prefix: {fixed_prefix}, 既存Cookie数: {len(existing_cookies)}")
136
+
137
+ # 既存のユーザーIDがあるかチェック
138
+ if self.cookie_name in existing_cookies:
139
+ existing_user_id = existing_cookies[self.cookie_name]
140
+ logger.info(f"既存の永続Cookie発見: ユーザーID {existing_user_id[:8]}...")
141
+ else:
142
+ logger.info("新規ユーザー: 永続Cookieなし")
143
+
144
  except Exception as cookie_check_e:
145
  logger.debug(f"Cookie確認エラー(通常動作に影響なし): {cookie_check_e}")
146
+ logger.info(f"HF Spaces永続Cookie管理システム初期化完了 - prefix: {fixed_prefix}")
147
 
148
  except Exception as e:
149
+ logger.error(f"永続Cookie管理初期化エラー: {e}")
150
 
151
  # 初期化処理中フラグをクリア
 
 
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
  st.session_state[browser_session_key] = True
159
 
160
  def get_or_create_user_id(self, force_reset: bool = False) -> str: