青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

qiezi的學習園地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首頁 :: 新隨筆 ::  ::  :: 管理 ::

Login Engine是非常好用的一個登錄engine,不過也有個缺點,它把用戶信息緩存在session里。如果用戶每次修改完自己的資料,都把session更新的話,自然是不會有什么數據不同步的問題。不過試想這樣一種情況:

1、用戶A登錄;用戶A的信息將保存在session[:user]里。
2、管理員操作用戶A,修改用戶A的資料并保存。
3、用戶A刷新頁面。

如果顯示用戶資料是從session[:user]讀取的話,顯然用戶A看到的是老的資料。

正確的做法是管理員修改用戶資料以后,把用戶session里的內容也更新,當然這個實施起來有些困難,目前看來無法由用戶ID獲得對應的session。

有朋友說session里不應該緩存用戶信息,而應只保存用戶ID。這是正確的,這樣可以解決上面的問題,不過帶來的問題是每次都要從數據庫查詢。

如果每次刷新頁面都從數據庫重新讀取用戶信息,對性能影響是很大的。試想一下用戶正在瀏覽一個論壇的帖子列表,這個頁面可能所有用戶看起來都是一樣的,唯一不一樣的地方是上面用戶信息的顯示。由于大部分內容都一樣,可以使用緩存加快瀏覽速度。不過卻由于session里只保存了用戶ID,不得不讀取數據庫來獲得用戶信息,這樣就把速度又拖慢了。

所以應該把用戶信息緩存起來,但要保證它能及時更新。方法自己做一個緩存管理器,能根據用戶ID得到用戶信息,也能隨時更新它。

學著ActionController::Caching做了一個UserManager,它可以根據線程配置來自動開關互斥器:
(/vender/plugins/login_engine/lib/login_engine/user_management.rb)

module?UserManagement? # :nodoc:
??class?UnthreadedUserManager? # :nodoc:
????def?initialize? # :nodoc:
?????? @users ? = ?{}
????end
????
????def?get(user_id)
??????
@users [user_id]
????end
????
????def?set(user_id
, ?user)
??????
@users [user_id]? = ?user
????end
??end
??
??module?ThreadSafety?
# :nodoc:
????def?get(user_id)? # :nodoc:
?????? @mutex . synchronize?{?super?}
????end
????def?set(user_id
, ?user)? # :nodoc:
?????? @mutex . synchronize?{?super?}
????end
??end
??
??class?UserManager?
< ?UnthreadedUserManager
????def?initialize
??????super
??????
if ?ActionController :: Base . allow_concurrency
????????
@mutex ? = ?Mutex . new
????????UserManager
. send ( : include , ?ThreadSafety)
??????end
????end
??end
??
??@
@user_manager ? = ?UserManagement :: UserManager . new
??
??def?set_current_user(user)
????
return ?session[ : user_id]? = ?nil? if ?user . nil ?
????session[
: user_id]? = ?user . id
????cache_user(user)
??end
??
??def?current_user
????get_user(session[
: user_id])
??end
??
??def?cache_user(user)
????
return ? if ?user . nil ?
????@
@user_manager . set(user . id , ?user)
??end
??
??def?get_user(user_id)
????@
@user_manager . get(user_id)
??end
end??

修改(/verdor/plugins/login_engine/lib/login_engine.rb):

#.
require
?'login_engine/user_management'

module?LoginEngine
??include?UserManagement
??
#.
end

加入上面加粗的2行。

修改(/verdor/plugins/login_engine/lib/login_engine/authenticated_system.rb),把session[:user]替換為session[:user_id]。

修改(/verdor/plugins/login_engine/app/controllers/user_controller.rb):

??def?login
????
return?if?generate_blank
????
@user?=?User.new(params[:user])
????
if?user?=?User.authenticate(params[:user][:login],?params[:user][:password])
??????user
.logged_in_at?=?Time.now
??????user
.save
??????set_current_user(user)
??????flash[
:notice]?=?"Login?successful"
??????redirect_to_stored_or_default?
:action?=>?'home'
????
else
??????
@login?=?params[:user][:login]
??????flash
.now[:warning]?=?'Login?unsuccessful'
????end
??end

??def?logout
????set_current_user(nil)
????redirect_to?
:action?=>?'login'
??end

??def?get_user_to_act_on
????
@user?=?current_user
??end

簡單測試:

require?'login_engine'

class?ApplicationController?
<?ActionController::Base
??include?LoginEngine
??
??helper?
:user
??model?
:user
????
??before_filter?
:login_required
end

class?ShowController?<?ApplicationController
??def?show
????render_text?"User?name:?#{current_user.first_name}"
??end
end

class?AdminController?<?ApplicationController
??def?edit
????user?
=?User.find(params[:id])
????user
.update_attributes(:first_name?=>?params[:name])
????cache_user(user)
??? render_text "User name: #{user.first_name}"
??end
end

一個簡單的模擬:
1、用戶A從IE登錄,訪問/show/show,將顯示用戶的名字。
2、管理員從FF登錄,訪問/show/show,將顯示管理員名字。
3、管理員訪問/show/show/2?name=hello,其中2是用戶A的ID。這將把用戶A的名字修改為hello。
4、用戶A刷新頁面,可以看到顯示的用戶名字已經發生變化。

以上過程說這個修改已經達到目的。實現這個功能并不難,主要是為了保留Login Engine原有的功能不變。

修改后的代碼:
www.shnenglu.com/Files/cpunion/login_engine.rar
posted on 2006-05-08 21:13 qiezi 閱讀(286) 評論(0)  編輯 收藏 引用 所屬分類: Ruby
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩大片| 欧美日产国产成人免费图片| 久久精精品视频| 国产一区二区三区高清| 一区二区三区黄色| 亚洲一区视频| 国产婷婷色综合av蜜臀av| 先锋影音国产一区| 欧美国产精品劲爆| 亚洲午夜av| 欧美日韩综合视频| 亚洲欧美精品| 亚洲美女黄网| 久热re这里精品视频在线6| 性欧美在线看片a免费观看| 亚洲免费在线观看| 日韩亚洲欧美一区| 久久久久久国产精品mv| 欧美日本三区| 亚洲国产综合在线| 午夜在线视频一区二区区别| 国语自产在线不卡| 国产精品草莓在线免费观看| 久久国产乱子精品免费女| 99精品国产在热久久婷婷| 美女精品一区| 久久久99爱| 亚洲自拍偷拍福利| 一区二区欧美日韩视频| 亚洲国产精品久久久久秋霞不卡| 欧美视频在线观看 亚洲欧| 国产日韩精品在线| 亚洲欧美春色| 国产精品网曝门| 久久精品国内一区二区三区| 亚洲大片一区二区三区| 国产一区二区三区丝袜| 国产精品久久久久久模特| 欧美性色视频在线| 欧美天堂亚洲电影院在线观看| 美女成人午夜| 欧美精品18+| 老鸭窝亚洲一区二区三区| 久久久久久久国产| 久久久夜精品| 欧美成人免费全部观看天天性色| 榴莲视频成人在线观看| 欧美激情第4页| 亚洲激情影视| 亚洲欧美中文另类| 久久人91精品久久久久久不卡| 影音先锋亚洲精品| 这里是久久伊人| 亚洲一区日韩| 欧美电影在线播放| 91久久精品久久国产性色也91| 99精品热视频| 久久精品99国产精品日本| 欧美美女bb生活片| 国内精品美女av在线播放| 亚洲无吗在线| 欧美成人激情视频免费观看| 在线亚洲高清视频| 欧美专区在线播放| 在线视频欧美日韩精品| 另类综合日韩欧美亚洲| 国产日韩专区| 午夜视频一区| 日韩一级在线| 欧美日韩中文在线观看| 亚洲高清二区| 欧美视频网址| 国产日韩欧美麻豆| 亚洲欧美成人综合| 欧美一区二区三区四区夜夜大片| 欧美另类极品videosbest最新版本| 国产视频亚洲精品| 久久精品论坛| 久久久久久噜噜噜久久久精品 | 亚洲国产专区校园欧美| 免费美女久久99| 久久久久久久97| 性视频1819p久久| 国产一区二区三区不卡在线观看 | 国语自产精品视频在线看抢先版结局 | 亚洲精品在线三区| 一区二区久久| 亚洲精品一区中文| 国产精品国产精品国产专区不蜜| 一本色道久久88综合日韩精品| 99re这里只有精品6| 国产一区二区中文| 欧美大成色www永久网站婷| 欧美成人一区二区三区片免费| 亚洲欧美美女| 亚洲精品看片| 欧美夫妇交换俱乐部在线观看| 久久在线视频在线| 亚洲欧美精品suv| 欧美a级一区| 欧美一区2区视频在线观看| 久久综合网hezyo| 亚洲欧美日本日韩| 欧美激情亚洲自拍| 久久久久看片| 国产欧美日韩亚洲一区二区三区| 国产精品草草| 中文在线不卡| 欧美精品成人| 能在线观看的日韩av| 国产一区成人| 亚洲永久在线| 亚洲欧美日韩国产一区二区三区 | 欧美成人激情在线| 一区二区国产在线观看| 狠狠入ady亚洲精品经典电影| 99综合在线| 欧美日韩国产欧| 亚洲精品一级| 亚洲一级在线观看| 国产精品日韩精品欧美在线| 亚洲欧洲在线一区| av不卡免费看| 国产精品手机在线| 亚洲欧美综合v| 免费人成网站在线观看欧美高清| 99国产精品久久久久久久久久 | 欧美连裤袜在线视频| 亚洲精品久久久久久久久久久久| 亚洲精品一区在线| 欧美日韩一区二区在线| 亚洲免费一级电影| 美女主播一区| 一区二区精品国产| 国产私拍一区| 欧美精品v日韩精品v韩国精品v| 亚洲午夜精品久久久久久app| 亚洲国产精品成人一区二区| 亚洲综合精品四区| 欧美激情久久久久久| 一区二区三区色| 狠狠色综合日日| 欧美女激情福利| 久久精品国产999大香线蕉| 亚洲区在线播放| 久热精品视频| 久久久美女艺术照精彩视频福利播放| 久久日韩精品| 欧美一级在线视频| 一区二区成人精品| 亚洲高清视频在线| 狠狠色伊人亚洲综合网站色| 欧美三区在线观看| 欧美另类亚洲| 欧美日韩性生活视频| 欧美va日韩va| 欧美福利视频在线| 蜜桃av一区二区三区| 久久在线免费观看| 久久久久久欧美| 久久精品中文字幕一区二区三区| 一本色道久久综合狠狠躁的推荐| 亚洲激情一区| 日韩手机在线导航| 中文国产亚洲喷潮| 久久国产婷婷国产香蕉| 久久av免费一区| 久久久高清一区二区三区| 亚洲日本免费| 国产视频观看一区| 欧美一级理论片| 香蕉国产精品偷在线观看不卡| 午夜精品久久久久久久99热浪潮| 亚洲在线黄色| 久久综合中文| 亚洲欧洲日产国产综合网| 亚洲精品国产日韩| 香港久久久电影| 欧美激情一区二区久久久| 欧美日韩一区在线视频| 国产综合婷婷| 一区二区日韩精品| 久久综合中文字幕| 一区二区三区视频在线| 久久国产精品久久久| 亚洲国产另类久久精品| 中文日韩电影网站| 欧美激情女人20p| 国产一区二区三区最好精华液| 亚洲日本欧美| 久久综合九色综合网站| 日韩视频一区| 欧美顶级大胆免费视频| 韩国福利一区| 久久久蜜臀国产一区二区| 国产麻豆成人精品| 亚洲美女黄网| 亚洲精品美女久久7777777| 久久色中文字幕| 亚洲电影第三页|