IIS 7.5 получает одну переменную сеанса в ASP.Net, но не вторую - PullRequest
2 голосов
/ 07 ноября 2011

У меня есть приложение ASP.Net (.Net 4, C #, веб-формы, указывающие на рабочий блок SQL), которое прекрасно работает в Visual Studio, но при загрузке на сервер IIS, размещенный в том же окне Windows 7, оноотказывается загружать вторую переменную сеанса.При отладке VS он отображается и показывает имя человека, вошедшего в приложение, обычно получая его из Active Directory, но я предоставляю возможность другому пользователю AD войти в систему.(Использование элементов управления входом ASP.Net на самом деле неосуществимо.)

Проблема в том, что я не могу отладить это на рабочем сервере, но, поскольку он работает в Visual Studio, отладка ничего не показывает.Есть мысли о том, что нужно изменить на IIS или в web.config?Я включил импорт для кода позади.

В конце концов я с этим и готов вернуться к хорошим старым строкам запроса, хотя это будет менее безопасно и будет выглядеть как Amazon.com ссылка.Справка.

Том Хоттл

using System;
using System.IO;
using System.Net;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.DirectoryServices;
using System.Configuration;


namespace ITIncidentMgt
{
    public partial class _Default : System.Web.UI.Page
    {
        private SqlConnection conn;
        private string dbConnect =
     ConfigurationManager.ConnectionStrings["AssetMgtString"].ConnectionString;
    private string SQL;
    private string sErr;
    private string hello;
    private string user_name;
    private int userID;
    private string user;
    private string field;
    private string val;
    private string add;
    private string wHere = " WHERE ";


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            user_name = Environment.UserName;
            if (DAC.OpenSqlConnection(ref conn, dbConnect, out sErr))
            {
                if (Session["u"] == null)
                {

                    SQL = "SELECT * FROM Users WHERE Username = '" + user_name + "'";
                    SqlCommand cmd = new SqlCommand(SQL, conn);
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        userID = Convert.ToInt32(dr["UserID"]);
                        user = dr["DisplayName"].ToString();
                    }
                    dr.Dispose();
                    cmd.Dispose();
                    Session["u"] = userID;
                    Session["n"] = user;
                }
                else
                {
                    userID = Convert.ToInt32(Session["u"]);
                    user = Session["n"].ToString();
                }
                hello = "Welcome, " + user + ".";
                lblHello.Text = hello;

Ответы [ 2 ]

0 голосов
/ 08 ноября 2011

И у нас это взломано.Эта строка выглядит следующим образом:

user_name = Environment.UserName;

В Visual Studio это тот, кто вошел в компьютер.На IIS это система.И есть система в таблице пользователей, из которой она черпает, но у системы нет отображаемого имени.Отсутствие отображаемого имени означает, что вы получаете нулевое значение, что, в свою очередь, делает это приложение очень печальным и выкидывает один из тех прекрасных экранов ASP.Net, которые нам всем нравятся.

К счастью, это произошло в данном конкретном предприятиираньше, поэтому решение находится в производстве на другом приложении.Или я могу просто заставить всех войти в систему вручную.

Как я нашел это: я написал временную метку с именем lblTest и установил lblTest.Text = user_name в загрузке страницы.

Спасибо всем за ввод,Естественно, это одна из тех ошибок, которые я должен знать лучше.

0 голосов
/ 07 ноября 2011

Что говорит kd7. Сеанс ["u"] будет выглядеть как ненулевой 'навсегда' после входа в систему, потому что вы не используете asp.net для входа и выхода. Пользовательская функциональность выхода из системы, которую вы должны использовать при входе в систему, будет выглядеть примерно так: protected void OnLogoutButton_Click (отправитель объекта, EventArgs e) { сессии [ "и"] = NULL; сессия [ "п"] = NULL; } Если для сеанса на сервере IIS установлено значение 20 минут, то через 20 минут вы должны будете автоматически выйти из системы.

...