1、MVC3中如何讓session跨Controller頁面
Session本身就是跨頁面的啊,直接使用就行了。
而且MVC不推薦在頁面中使用Session,因為按照規范所有輸入的對象都應該是已經定義好的Model的。
2、MVC cshtml 怎樣使用Session
Session共享的解決方案
1、客戶端SessionID值唯一;
對於不同的域名:主域名、子域名、跨站點域名或跨伺服器域名,用戶在打開頁面時會產生不同的SessionID,
為了使這些站點在用戶登錄時只登錄一次,那我們就要解決SessionID的問題,必須使SessionID在這些共享Session的站點中只產生一次。而SessionID是存儲在客戶端的cookie之中鍵值為ASP.NET_SessionId的一個字元串(也可以存儲在URL中,這里不作使介紹),為此只須使各站點存儲的SP.NET_SessionId唯一即可。
因每個客戶端在打開時會產生一個SessionID,為此我們要做的就是重置SessionID。我們可以在繼承HttpMole,在結束請求時重寫SessionID
代碼:
public class MakeSessionIDOneOnly : IHttpMole
{
private string m_RootDomain = string.Empty;
public void Dispose()
{
}
public void Init(HttpApplication context)
{
m_RootDomain = ConfigurationManager.AppSettings["RootDomain"];
Type stateServerSessionProvider = typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.OutOfProcSessionStateStore");
FieldInfo uriField = stateServerSessionProvider.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic);
if (uriField == null)
throw new ArgumentException("UriField was not found");
uriField.SetValue(null, m_RootDomain);
context.EndRequest += new System.EventHandler(context_EndRequest);
}
void context_EndRequest(object sender, System.EventArgs e)
{
HttpApplication app = sender as HttpApplication;
for (int i = 0; i < app.Context.Response.Cookies.Count; i++)
{
if (app.Context.Response.Cookies[i].Name == "ASP.NET_SessionId")
{
app.Context.Response.Cookies[i].Domain = m_RootDomain;
}
}
}
}
為使用以上代碼,須配置下面節點項。
<httpMoles>
<add name="節點名稱" type="類名全稱, 程序集"/>
</httpMoles>
3、MVC session問題
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException,IOException{
//....
LoginService ls = null;
User user = null;
RequestDispatcher rd = null;
String us =null;
String pwd = null;
String rold = null;
PrintWriter pw = null;
try {
resp.setCharacterEncoding("GBK");
pw = resp.getWriter();
ls = new LoginService(new UserDAOImpl());
us = req.getParameter("ename");
pwd = req.getParameter("password");
String rol = req.getParameter("role");
if(rol.equals("0"))
rold="管理員";
else if(rol.equals("1"))
rold="老師";
else rold="學生";
//按照用戶名、密碼查詢用戶合法性
user = ls.queryUser(us, pwd,rold);
} catch (UserAuthException e) {
//當發生異常時把請求轉發到錯誤頁面
rd = req.getRequestDispatcher("/message.jsp");
req.setAttribute("message", "用戶名或密碼錯誤");
req.setAttribute("link","<a href='login.jsp'>請重試!</a>");
rd.forward(req, resp);
return;
}
//若登錄成功則把用戶作為session范圍的屬性存放
HttpSession ss = req.getSession();
ss.setAttribute(Constant.LOGIN_USER, user);
if(rold.equals("管理員")){
rd = req.getRequestDispatcher("/manager.jsp");
rd.forward(req,resp);
}else{
rd = req.getRequestDispatcher("/welcome.jsp");
rd.forward(req, resp);
return;
}
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException,IOException{
doGet(req, resp);
}
}
4、ASP MVC怎麼實現多個會話之間的數據共享
用靜態類緩存,在應用程序重啟之前數據都是共享存在的。
或者保存到第三方緩存系統或資料庫里
5、mvc登錄怎麼設置session
httpcontext.user是ASP.NET中內置抄的用戶驗證機制襲,它的對象必須實現IPrincipal介面,而Iprincipal定義的屬性之一是Identity,它必須實現Iidentity介面,要寫了實現這兩個介面的類,
6、[MVC4]在兩個controller中用session傳值問題?
這樣就行了
System.Web.HttpContext.Current.Session["code"] 不然它是controller里的session mvc裡面可以用TempData等替代的
7、MVC中的Session怎麼了
具體設置很簡單,方法有三種:
(1)在主頁面或者公共頁面中加入:session.setMaxInactiveInterval(600);參數600單位是秒,即在沒有10分鍾活動後,session將失效。
這里要注意這個session設置的時間是根據伺服器來計算的,而不是客戶端。所以如果是在調試程序,應該是修改伺服器端時間來測試,而不是客戶端。
(2)也是比較通用的設置session失效時間的方法,就是在項目的web.xml中設置
<!-- 設置session失效,單位分 -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
// 設置為0,-1 表示永不超時
(3)直接在應用伺服器中設置,如果是tomcat,可以在tomcat目錄下conf/web.xml中找到元素,tomcat默認設置是30分鍾,只要修改這個值就可以了。
<!-- ==================== Default Session Configuration ================= -->
<!-- You can set the default session timeout (in minutes) for all newly -->
<!-- created sessions by modifying the value below. -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
需要注意的是如果上述三個地方如果都設置了,有個優先順序的問題,從高到低:(1)>(2)>(3)
8、asp.net MVC在web.config里配置sessionstate,可以讓服務端獲取網址中的sessionid或者獲取cookie里的sess
把狀態寫在cookie中,先取網址,再取cookie
9、spring mvc ajax 請求時為何不能共用一session,它會新建一個session
可以共用啊
10、MVC分部視圖之間怎麼共享數據
一個視圖對應一個控制器,視圖要顯示數據,就要先執行控制器。在控制器裡面用Session或者回cookie實現共享。或者視圖答A要顯示視圖B的內容,試圖A對應的控制器「調用」試圖B對應的控制器裡面的實現也是可以的。