MONTREAL -- Tied at home through two periods, the Montreal Canadiens geared up in their dressing room for a strong finish -- and it worked.
Halpern broke a 1-1 tie 2:18 into the third, Gionta put the Canadiens ahead by two goals midway through the period and Hamrlik closed the scoring with 3:32 left. Mike Cammalleri added a power-play goal in the first for Montreal.
"We came back in here and we knew we had an opportunity to win a hockey game," said Price, who turned aside all 13 shots he faced in the second to keep the game tied. "It was still 1-1 and it was up to us to play out the 20 minutes, and we did it."
The Canadiens are 8-1-1 at home since a 3-2 loss to the Senators on Nov. 6.
"We've said all year that our goalie's given us a chance to win every game," Halpern said. "When we've had a couple of lulls in our season, he's come out with unbelievable performances.
"He covers up a lot of mistakes that we make as a team, but he also gives us confidence to feel good about the way we're playing and to get on things," Halpern said.
Ottawa's Nick Foligno scored a power-play goal late in the first period, but the Senators fell to 3-7-1 in their last 11 after beating the Rangers in New York on Sunday.
"They're such a strong team when you let them get going, and that seemed to be the case tonight," Foligno said. "We just kind of let them gain too much momentum, and they took advantage of it."
Halpern put the Canadiens ahead for good when he drove the right side and held the puck until goalie Pascal Leclaire sprawled to the ice. He then scored his sixth goal into an open side.
"He came out so far that there was a lot of space behind him, and he was down," Halpern said. "It was more of me freezing myself and skating into the corner. It probably looked better than what was going through my head."
Gionta netted his ninth off a two-on-one rush with Andrei Kostitsyn to make it 3-1 at 10:01.
Hamrlik scored during four-on-four play when he batted in a puck above the head of goalie Brian Elliott, who got a glove on Gionta's shot -- the first drive he faced after replacing Leclaire moments earlier.
"I thought we did a good job of regrouping in between periods and getting back on track," Gionta said.
Leclaire, who made 30 saves overall, left the game briefly with 4:22 remaining in the third after breaking a skate blade. Elliott stopped one of two shots he faced in the 2:28 he played before Leclaire returned.
Montreal held a 13-6 shots advantage in the first, but the game was tied 1-1 after the period.
Cammalleri scored his ninth goal on an unassisted effort at 9:09, taking advantage of a turnover by Senators captain Daniel Alfredsson.
Foligno tied it with his second goal after he took Jason Spezza's cross-ice pass and put in a shot from the left side off Price's left pad with 8.5 seconds remaining in the period.
Senators forward Peter Regin was a healthy scratch for a second straight game. Rookie Bobby Butler took his place in the lineup again after making his season debut Sunday. ... Canadiens center Scott Gomez left the game in the second period because of a lower body injury and didn't return. ... Rookie defenseman P.K. Subban was left out of Montreal's lineup for a third straight game in favor of rookie Yannick Weber.