我有一个User对象,一旦成功进行身份验证,就会隐藏在会话中(没有安全信息)以便于调用,并确定我们是否有经过身份验证的用户或匿名会话.用户可以通过多种途径更改其部分或全部信息,我希望将该会话值保持最新.显而易见的答案是更新afterSave()回调中的值,但这当然违反了MVC.
是否有另一种方法可以捕获一个地方的每个变化,这样我就不必在整个地方放弃会话写入?我想不出任何事情,也没有找到任何其他想法.我是唯一一个尝试这样做的人吗?
谢谢.
最终解决方案:坦率地说,我将neilcrookes的回答标记为答案,因为似乎没有更好的方法.但是,由于这种方式违反了我的OCD意识,我采取了一条略有不同的道路.我决定让我的User::authenticate()方法将经过身份验证的用户对象返回给调用者,以便它可以随心所欲地执行任何操作.呼叫者"想要"做的事情之一就是在会话中删除该值.这是冗余,但它非常非常有限.在我看来,这比从模型中访问会话感觉更好(尽管如果你这样做肯定是该死的,如果你不这样做则该死).
我正在导入一个包含超过5,000条记录的csv文件.我目前正在做的是,将所有文件内容作为一个数组并逐个保存到数据库中.但是在脚本失败的情况下,整个过程将再次运行,如果我再次开始逐个检查它们,它会使用大量查询,所以我想暂时将导入的值保存在会话中.
在会话中保留那么多记录是一种好习惯.或者还有其他方法吗?
谢谢.
我有一个运行Spring 3.0并使用Spring-MVC的Web应用程序.我有几个控制器设置如下:
@Controller
@RequestMapping("/admin")
@SessionAttributes({"clientLogin", "selectTab", "user", "redirectUrl"})
public class AdminController {
...
}
@Controller
@SessionAttributes({"clientLogin", "selectTab", "user", "redirectUrl"})
public class PublicController {
....
}
Run Code Online (Sandbox Code Playgroud)
我可以将带注释的变量添加到ModelMap中
map.addAttribute("user", "Bob");
Run Code Online (Sandbox Code Playgroud)
这样可以将变量保存在当前控制器中; 我可以从该控制器中的任何其他方法访问modelMap中的var.但是当用户访问另一个Controller中的页面时,即使@SessionAttributes中列出了相同的变量,它也不会在第二个控制器中可用.
是否可以使用注释跨多个控制器访问这些带注释的变量?
我有一个站点,当用户登录时,用户名存储在会话变量中,我想知道从这个会话变量中存储的值查询是否安全?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.Web.Security;
using System.Data;
using System.IO;
using SurelyKnown.Core;
using System.Configuration;
using System.Collections;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Xml;
using System.Windows.Forms;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[System.Web.Services.WebMethod(EnableSession = true)]
public static string[] GetCompletionList(string prefixText, int count, string contextKey)
{
int newOrgID = Convert.ToInt32(Session["uOrgID"].ToString());
Run Code Online (Sandbox Code Playgroud)
错误发生在最后一行
CS0120: An object reference is required for the non-static …Run Code Online (Sandbox Code Playgroud) 会话变量可以是int?我想在Session["PagesViewed"]+1;每次加载页面时递增 .我在尝试增加会话变量时遇到错误.
if (Session["PagesViewed"].ToString() == "2")
{
Session["PagesViewed"] = 0;
}
else
{
Session["PagesViewed"]++;
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读伟大的Michael Hartl教程,在这里构建ruby应用程序.
我试图理解如何创建会话的概念,我坚持理解这一行:
self.current_user = user
Run Code Online (Sandbox Code Playgroud)
在这个方法中:
module SessionsHelper
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
end
Run Code Online (Sandbox Code Playgroud)
我理解使用user_token创建cookie的整个概念.
但我不明白是什么 self.current_user = user 意思,为什么甚至需要保留这行代码 - 我有令牌的cookie - 为什么我需要知道当前用户?
此外,这个"自我"存储在哪里 - 它不像flash[:success]我在我的一个观点中看到的参数.所以我不明白它在哪里.
在同一模块中也有这两种方法:
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
Run Code Online (Sandbox Code Playgroud)
而且我仍然试图将这个神秘的目的点连接起来current user- 它的目的是创建@current_user在视图中使用的全局变量吗?
如果是这样 - 为什么有这两个重复的功能def current_user=(user)和def current_user
ruby session ruby-on-rails session-variables session-cookies
我在移动Safari iOS 6中遇到了通过AJAX设置的会话变量的问题.我提供了一个示例,它将设置会话变量,重定向到另一个页面,放弃会话并重新开始.这前两次工作正常.在第三次通过该过程时,会话变量丢失.问题只发生在iOS 6 safari中.它适用于我尝试过的所有其他浏览器.
该样本包含3页.Page1设置会话变量并重定向到第2页.Page 2显示会话变量.第3页放弃了会话变量.
第1页HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="sm" runat="server" EnablePageMethods="true">
<Scripts>
<asp:ScriptReference Path="~/Page1.js" />
</Scripts>
</asp:ScriptManager>
<div onclick="setSessionVariable()">Set session variable and redirect to page 2</div>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
第1页Javascript:
function setSessionVariable() {
PageMethods.SetSessionVariable(displaySetSessionVariable);
}
function displaySetSessionVariable(bReturn) {
window.location = "Page2.aspx";
}
Run Code Online (Sandbox Code Playgroud)
第1页代码:
using System.Web.Services;
namespace SafariSessionProblem {
public partial class Page1 : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
}
[WebMethod]
public …Run Code Online (Sandbox Code Playgroud) <script type="text/javascript">
function checkQuery()
{
var val = form1.proDown.options[form1.proDown.options.selectedIndex].value;
var txt = form1.proDown.options[form1.proDown.options.selectedIndex].text;
//alert(val+' | '+txt);
<?php $_SESSION['value1']= ?> = txt; <?php ; ?>
}
</script>
Run Code Online (Sandbox Code Playgroud)
我有这个代码,它不起作用?任何人都有解决方案来访问$ _SESSION []中的javascript变量.
我已经创建了名为"Verified"的会话,如下所示(在我的登录控制器中):
foreach($result as $row)
{
$sess_array = array(
'id' => $row->memberid, //Session field: id.
'username' => $row->member_userunique //Session field: username.
);
// Create a session with a name verified, with the content from the array above.
$this->session->set_userdata('verified', $sess_array);
}
Run Code Online (Sandbox Code Playgroud)
现在,当用户打开一个名为book的页面(带有名为book的控制器)时,我想在我的"已验证"会话中再添加一个名为"book_id"的附加变量.
这就是我所做的
function index()
{
//Add a new varible called book_id
$this->session->set_userdata('book_id', $titleID);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下方法检索'book_id'时:
$session_data = $this->session->userdata('verified');
$article_id = $session_data['book_id'];
$user_id = $session_data['id'];
Run Code Online (Sandbox Code Playgroud)
它只能检索'id'但是'book_id'没有定义.但是如果对$ this-> session-> all_userdata()执行var_dump(),我可以看到已成功附加'book_id'会话变量.
阅读关于会话的CI文档后,我意识到上面的代码将无法正常工作,因为我没有告诉它应该将变量添加到哪个会话.
有人能指出我正确的方向吗?
session ×5
php ×4
c# ×2
ajax ×1
asp.net ×1
cakephp ×1
codeigniter ×1
controller ×1
csv ×1
ios6 ×1
javascript ×1
mysql ×1
reset ×1
ruby ×1
spring ×1
spring-mvc ×1
variables ×1