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

qiezi的學(xué)習(xí)園地

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

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

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

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

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

正確的做法是管理員修改用戶資料以后,把用戶session里的內(nèi)容也更新,當(dāng)然這個(gè)實(shí)施起來有些困難,目前看來無法由用戶ID獲得對(duì)應(yīng)的session。

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

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

所以應(yīng)該把用戶信息緩存起來,但要保證它能及時(shí)更新。方法自己做一個(gè)緩存管理器,能根據(jù)用戶ID得到用戶信息,也能隨時(shí)更新它。

學(xué)著ActionController::Caching做了一個(gè)UserManager,它可以根據(jù)線程配置來自動(dòng)開關(guān)互斥器:
(/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

簡(jiǎn)單測(cè)試:

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

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

以上過程說這個(gè)修改已經(jīng)達(dá)到目的。實(shí)現(xiàn)這個(gè)功能并不難,主要是為了保留Login Engine原有的功能不變。

修改后的代碼:
m.shnenglu.com/Files/cpunion/login_engine.rar
posted on 2006-05-08 21:13 qiezi 閱讀(279) 評(píng)論(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>
            国产一区二区三区四区五区美女| 久久亚洲综合网| 久久久久久夜| 欧美一区二区三区在线视频| 欧美在线1区| 免费观看成人鲁鲁鲁鲁鲁视频 | 国产主播一区| 亚洲电影观看| 宅男噜噜噜66一区二区 | 精品动漫一区二区| 亚洲精品123区| 亚洲一区二区三区色| 久久国产免费看| 欧美高清在线观看| 在线一区二区日韩| 久久免费视频在线| 欧美日韩午夜精品| 国模套图日韩精品一区二区| 亚洲国产影院| 午夜视频精品| 亚洲黄网站黄| 亚洲免费视频网站| 久久综合一区二区三区| 欧美视频一区| 亚洲韩国精品一区| 欧美一区二区三区电影在线观看| 欧美高清视频一区二区| 亚洲一区日韩在线| 蜜臀av国产精品久久久久| 国产精品试看| 日韩视频免费观看高清完整版| 国产伦精品一区二区三区免费迷| 国产永久精品大片wwwapp| 亚洲国产精品久久久久| 亚洲欧美日韩中文播放| 欧美电影在线播放| 欧美一级专区| 国产精品久久久久久久久搜平片| 黄色亚洲精品| 欧美亚洲一区二区在线观看| 亚洲精品你懂的| 午夜精品一区二区三区电影天堂| 欧美成人免费网站| 狠狠色丁香久久婷婷综合_中| 亚洲一二区在线| 亚洲日本va在线观看| 久久五月天婷婷| 国内精品久久久久久久果冻传媒| 亚洲一区美女视频在线观看免费| 欧美搞黄网站| 快she精品国产999| 影音先锋成人资源站| 久久久99国产精品免费| 亚洲欧美另类在线| 国产精品视频xxxx| 亚洲综合成人婷婷小说| 99精品免费视频| 欧美日韩另类视频| 中文日韩在线| 一区二区高清在线| 国产精品ⅴa在线观看h| 亚洲永久精品国产| 一本色道久久综合亚洲精品按摩| 欧美另类在线观看| 一区二区三区日韩精品| 日韩亚洲欧美精品| 国产精品久久久久久久久免费樱桃| 在线亚洲欧美| 亚洲一区高清| 国内精品亚洲| 亚洲高清三级视频| 欧美日韩激情小视频| 亚洲一区二区免费看| 亚洲欧美日韩一区二区三区在线观看 | 国产精品美女久久久久久免费| 一区二区三区毛片| 亚洲一区二区三区四区五区黄| 国产精品制服诱惑| 欧美xx69| 欧美午夜无遮挡| 久久亚洲综合| 亚洲国产高清自拍| 欧美激情视频网站| 性高湖久久久久久久久| 久久精品日产第一区二区| 亚洲黄页一区| 亚洲性av在线| 在线精品一区| 宅男噜噜噜66国产日韩在线观看| 国产欧美精品国产国产专区| 久久综合中文色婷婷| 欧美成人中文字幕| 欧美一区二区三区日韩| 久久久久久夜| 亚洲影院色在线观看免费| 久久久精品国产一区二区三区| 亚洲人人精品| 午夜国产精品影院在线观看| 91久久中文| 欧美一区二区三区免费看| 亚洲精品久久久久久久久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产亚洲福利一区| 亚洲人妖在线| 在线成人亚洲| 亚洲欧美中文字幕| 亚洲视频第一页| 欧美成人一二三| 久久久蜜桃一区二区人| 国产精品黄页免费高清在线观看| 欧美电影免费| 黄色成人在线观看| 午夜久久黄色| 亚洲永久视频| 欧美日韩一区视频| 亚洲国产va精品久久久不卡综合| 国产视频综合在线| 亚洲一区二区精品在线观看| 99www免费人成精品| 免费视频久久| 欧美国产激情| 亚洲第一在线视频| 久久久99久久精品女同性| 欧美在线日韩在线| 国产毛片久久| 午夜精品福利电影| 欧美一级播放| 国产精品人人做人人爽| 亚洲毛片一区二区| 亚洲美女av网站| 欧美精品在欧美一区二区少妇| 欧美国产在线电影| 亚洲精品久久久久久下一站| 久久天天躁狠狠躁夜夜爽蜜月| 可以免费看不卡的av网站| 国内精品久久久久久久影视麻豆| 欧美亚洲视频在线观看| 久久久久国产精品一区三寸| 国产一区二区三区精品久久久| 欧美在线观看视频在线| 久久人人97超碰精品888| 一区福利视频| 免费视频久久| 日韩性生活视频| 亚洲欧美日韩在线| 国产亚洲一区在线播放| 久久久久久久综合| 亚洲电影免费在线观看| 99视频日韩| 亚洲女同精品视频| 久久精品91久久香蕉加勒比| 国产亚洲欧美一区在线观看| 久久av免费一区| 免费在线看一区| 亚洲片国产一区一级在线观看| 欧美aaa级| aa亚洲婷婷| 久久久久免费视频| 亚洲欧洲美洲综合色网| 欧美日韩成人一区二区| 在线综合视频| 久久久国产精品一区二区中文| 在线欧美电影| 国产精品白丝jk黑袜喷水| 欧美一级专区免费大片| 亚洲动漫精品| 欧美专区亚洲专区| 亚洲精品麻豆| 国产精品麻豆va在线播放| 久久久99国产精品免费| 亚洲免费成人av电影| 久久久久国产精品人| 99精品国产热久久91蜜凸| 国产日韩欧美一区在线 | 欧美亚洲尤物久久| 在线播放豆国产99亚洲| 欧美午夜激情视频| 久久综合九色99| 亚洲午夜激情在线| 欧美不卡一区| 久久精品中文字幕免费mv| 亚洲精品一区在线| 国产亚洲精品福利| 欧美天堂亚洲电影院在线播放| 久久精品成人欧美大片古装| 亚洲美女视频在线观看| 欧美超级免费视 在线| 欧美影院午夜播放| 99国产精品| 亚洲国产精品成人| 国产欧美亚洲精品| 欧美性做爰毛片| 欧美精品国产精品日韩精品| 久久精品123| 欧美怡红院视频| 亚洲私人影院| 中文精品视频一区二区在线观看| 亚洲黄色小视频| 欧美激情中文字幕乱码免费| 欧美在线免费播放|