Сессия кровоточит другому клиенту - PullRequest
0 голосов
/ 21 мая 2018

Я храню имя и адрес в сеансе в классе статического сеанса.Когда клиент открывает экран оплаты, я заполняю форму с именем и адресом.Если клиент A открывает экран кредитной карты, а затем клиент B открывает тот же экран, у клиента B есть имя и адрес клиента A.

Я думаю, это происходит из-за «статического» сеанса.учебный класс?Если это так, как мне избежать этого?

Вот мой класс MySession:

  public static class MySession
  {
    public static string BranchNumber { set; get; }
    public static string AccountNumber { set; get; }
    public static string Name { set; get; }
    public static string CustomerEmail { get; set; }
    public static string Street { get; set; }
    public static string Zip { get; set; }
    public static string Zip4 { get; set; }
}

И моя форма:

@model  SssMobileIInquiry.Models.HomeModels.CreditCard

@{
  ViewBag.Title = "Credit Card Payment";
}

<div class="container">

  @using (Html.BeginForm("SubmitCreditCardCharge", "Home", FormMethod.Post))
  {

    <h4>Credit Card Payment</h4>

    <div class="row">
      <div class="col-sm-3">
        Name
      </div>
      <div class="col-sm-9 focus">
        @Html.TextBoxFor(m => m.NameOnCard, new { @class = "form-control" })
      </div>
    </div>

    <div class="row">
      <div class="col-sm-3">
        Street
      </div>
      <div class="col-sm-9">
        @Html.TextBoxFor(m => m.Street, new { @class = "form-control" })
      </div>
    </div>

    <div class="row">
      <div class="col-sm-3">
        Zip Code
      </div>
      <div class="col-sm-9">
        @Html.TextBoxFor(m => m.ZipCode, new { @class = "form-control", @maxlength = "9" })
      </div>
    </div>

    <div class="row">
      <div class="col-sm-3">
        Card Number
      </div>
      <div class="col-sm-9">
        @Html.TextBoxFor(m => m.CardNumber, new { @class = "form-control" })
      </div>
    </div>

    <div class="row">
      <div class="col-sm-3">
        Expiration Date
      </div>
      <div class="col-sm-9 datefieldsmall">
        @Html.TextBoxFor(m => m.ExpirationDateMonth, new { @class = "form-control", @maxlength = "2", @placeholder = "MM" })
      </div>
      <div class="col-sm-9 datefieldsmall">
        @Html.TextBoxFor(m => m.ExpirationDateYear, new { @class = "form-control", @maxlength = "2", @placeholder = "YY" })
      </div>
    </div>

    <div class="row">
      <div class="col-sm-3">
        CVV Number
      </div>
      <div class="col-sm-9">
        @Html.TextBoxFor(m => m.PinNumber, new { @class = "form-control", @maxlength = "4" })
      </div>
    </div>

    <div class="row">
      <div class="col-sm-3">
        Amount
      </div>
      <div class="col-sm-9">
        @Html.TextBoxFor(m => m.PaymentAmount, new { @class = "form-control", @maxlength = "7" })
      </div>
    </div>

    <div class="warning">
      @Html.ValidationMessageFor(m => m.PaymentAmount)
    </div>

    <div class="row">
      <input id="submitpayment" class="btn btn-primary btn-block buttonx accountinfobutton" type="submit" value="Submit" />
    </div>
  }


  @using (Html.BeginForm("AccountInfo", "Home", FormMethod.Post))
  {
    <div class="row">
      <input id="submitpayment" class="btn btn-primary btn-block buttonx accountinfobutton" type="submit" value="Account" />
    </div>
  }

</div>

И мой ActionResults:

public ActionResult CreditCard()
{
  if (MySession.CorporationId == Guid.Empty || string.IsNullOrEmpty(MySession.AccountNumber))
  {
    return View("Index");
  }

  var model = new Models.HomeModels.CreditCard();
  model.NameOnCard = MySession.Name;
  model.Street = MySession.Street;
  model.ZipCode = MySession.Zip;

  model.PaymentAmount = MySession.TotalBalance.Contains("-") ? "" : MySession.TotalBalance;


  if (MySession.BudgetBalance.GetNumericValue() > 0 && MySession.BudgetRate.GetNumericValue() > 0)
  {
    model.PaymentAmount = MySession.BudgetBalance;
  }

  return View("CreditCard", model);
}

Я заполняю свою модель MySession:

  model.NameOnCard = MySession.Name;
  model.Street = MySession.Street;
  model.ZipCode = MySession.Zip;

Я не уверен, почему информация о клиенте отображается для другой учетной записи, вошедшей в систему. Любые идеи будут высоко оценены.

Спасибо за помощь!

1 Ответ

0 голосов
/ 21 мая 2018

Вы используете статический.Статический означает, что существует только 1 копия класса и распространяется по всему приложению.Вам нужно изменить его, чтобы он не был статичным, и вы должны создать его для каждого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...