Substitute Paul Gallagher scored his ninth goal of the season to secure Stoke's first win in ten league games and push Millwall closer to relegation.
Gallagher, on a season's loan from Blackburn, returned from a three-match injury lay-off to ease the pressure on his manager Johan Boskamp.
Milwall started with the greater urgency and were rewarded when Ben May gave them an eighth minute lead with his second goal in two games.
A half cleared corner was returned to the danger area by Tony Craig and May buried a downwards header from eight yards, sending the ball just inside Steve Simonsen's left-hand post.
But Craig was back in the action in very different circumstances in the 15th minute when he conceded a penalty by bringing down Carl Hoefkens.
Referee Colin Webster initially waved away Hoefkens' appeal, but pointed to the spot after a linesmen laid his flag.
Hoefkens stepped up to slot home the penalty to Andy Marshall's left, despite the keeper diving in the right direction.
Neither side seriously threatened to add to their tally before half-time but Stoke soon built up a head of steam after the break.
Mamady Sidibe and Clint Hill, who missed the target from six yards following a Gallagher cross, both went close before Gallagher struck in the 57th minute.
The Scotland Under-21 international, who replaced former Millwall midfielder Peter Sweeney, who suffered a recurrence of a back injury curled in a splendid 20-yard effort beyond Marshall's desperate dive.
Gallagher should have scored again after a terrific run by Luke Chadwick as Stoke began to play with a confidence which had been sadly lacking since the turn of the year.
Millwall worked hard and battled until the end, but their obvious lack of firepower makes it difficult to see how they can escape the drop.